ভিমে ফাঁকা জায়গায় ট্যাবগুলি প্রতিস্থাপন করুন


358

আমি gVim- এ স্পেসে ট্যাব রূপান্তর করতে চাই। আমি আমার সাথে নিম্নলিখিত লাইনটি যুক্ত করেছি _vimrc:

set tabstop=2

এটি দুটি স্পেসে থামতে কাজ করে তবে এটি এখনও মনে হচ্ছে একটি ট্যাব কী sertedোকানো হয়েছে (পরে স্থানগুলি গণনা করার জন্য আমি h কী ব্যবহার করার চেষ্টা করেছি)।

আমি নিশ্চিত না যে gVim ট্যাবগুলিকে স্পেসে রূপান্তর করতে আমার কী করা উচিত?


1
ব্যক্তিগতভাবে, আমি ট্যাবস্টপটি পেয়েছি = 2 খুব ছোট একটি ইনডেন্ট; আমি ts = 4 ব্যবহার করি এবং বুঝতে পারি যে লোকেরা (যেমন লিনাক্স কার্নেল দল) টিএস = 8 ব্যবহার করে (এবং তারা প্রসারিত ট্যাব ব্যবহার করে না - আমি করি)।
জোনাথন লেফলার

4
ভিএম এর ভিতরে ফাঁকা স্থানগুলিকে ট্যাবগুলিতে রূপান্তর করার কোনও উপায় আছে কি?
cwd

2
@ সিডাব্লুডি স্পেসগুলির পরিবর্তে ট্যাব চরিত্রের ( ^Iযা Ctrl-vতখন থেকে আসে Tab) কাজ করবে, উদাহরণস্বরূপ যদি আপনার বর্তমান ট্যাবগুলি 4 স্পেসে থাকে::%s/ /^I/g
ইন্দ্র জিনঞ্জার

উত্তর:


381

আইআইআরসি, এরকম কিছু:

set tabstop=2 shiftwidth=2 expandtab

কৌতুক করা উচিত। আপনার যদি ইতিমধ্যে ট্যাব থাকে তবে ডাবল স্পেস দিয়ে প্রতিস্থাপন করার জন্য এটি একটি দুর্দান্ত গ্লোবাল আরই দিয়ে অনুসরণ করুন।


25
ওহো, এটি ":%! প্রসারিত -t2"
পল

368
বা আপনি কেবল ব্যবহার করতে পারেন: retab
রম্পিয়ন

আমি যদি এটি ফাঁকা জায়গায় সংরক্ষণ করতে চাই? এখনই যখন আমি:
ডাব্লিউকিউ

1
@ গার্কেম আপনার .vimrc এ এই আদেশগুলি রেখেছিল, যাতে প্রতি সেশনে
ভিএম


824

অন্য উত্তরের মত আপনি একবার এক্সটেনড্যাব পেয়ে গেলে আপনার নতুন সেটিংস অনুযায়ী বিদ্যমান ফাইলগুলিকে রূপান্তর করার অত্যন্ত সুবিধাজনক উপায় হ'ল:

:retab

এটি বর্তমান বাফারে কাজ করবে।


তবে কীভাবে আমরা ট্যাব-এর প্রতিটি ঘটনার নিশ্চিতকরণ জিজ্ঞাসা করতে পারি?
ওকুলাস ডেক্সটার

8
এবং ভিম হয়ে, এটি দৃষ্টিভঙ্গি নির্বাচিত অঞ্চলগুলিতেও কাজ করে :)
অ্যান্ডি

2
আমাকে একটি নতুন জিনিস শেখানোর জন্য ধন্যবাদ। আমি :%s/\t/ /gআপনার মন্তব্য দেখার আগে বছর ধরে ক্লান্তিকর ব্যবহার করেছি ।
তাই লে

আপনি :args retab | wকমান্ড লাইনে খোলা সমস্ত ফাইলগুলি করতেও করতে পারেন , যেমন vim *.txt,।
জেকড

কেউ কি জানেন যে ভিমের কোনও সংস্করণ রয়েছে: রিট্যাব? আমার 7.3.322 না।
বিটমেকার

114

চেষ্টা

set expandtab

নরম ট্যাবগুলির জন্য।

প্রাক বিদ্যমান বিদ্যমান ট্যাবগুলি ঠিক করতে:

:%s/\t/  /g

আপনি ইতিমধ্যে আপনার ট্যাবস্টপটি 2 টি স্পেসে সেট করার পরে আমি দুটি স্পেস ব্যবহার করেছি।


5
এই ফিক্স আপটি দুটি স্থান সন্নিবেশ করবে যেখানে কেবলমাত্র একটির প্রয়োজন।
জোনাথন লেফলার

8
প্রতিস্থাপনটি না করার পরিবর্তে নিক উপরে উল্লিখিত প্রস্তাবগুলি - যেমন retab করতে পারেন। এটি আপনার বিদ্যমান ট্যাবগুলিকে আপনার ট্যাবস্টপে সেট করা স্পেসের সংখ্যা হিসাবে পুনরায় চালু করবে।
গওরি

দুর্দান্ত টিপ! বিম আমাকে একটি পুরোপুরি আইডেন্টেড ফাইল দেখিয়েছিল যখন বিড়াল (লিনাক্স সেন্টিমিডি) অনিয়মিত পরিচয় দেখিয়েছিল। আমি ভিমে যেমন ব্যবহার করি ঠিক তেমন 2 টি স্পেস পরিবর্তন করেছি set ts = 4
করলফিলিপ

60

এটি আমার পক্ষে কাজ করেছে:

আপনি প্রথমে এটি করে ট্যাব দেখতে পাবেন:

:set list

তারপরে ট্যাবগুলি প্রতিস্থাপন করা সম্ভব করার জন্য এটি করুন:

:set expandtab

তারপর

:retab

এখন সমস্ত ট্যাবগুলি এমন জায়গাগুলির সাথে প্রতিস্থাপন করা হয়েছে যা আপনি এর পরে স্বাভাবিক দর্শনে ফিরে যেতে পারেন:

:set nolist

1
:set listশুধু সুন্দর।
আমির এ। শাবানী

44

gg=G পুরো ফাইলটি পুনরায় পাঠানো হবে এবং সহকর্মীদের কাছ থেকে ফাইলগুলিতে থাকা সমস্ত ট্যাব না থাকলে সর্বাধিক সরিয়ে ফেলব।


1
এটি ফাঁকা জায়গায় ট্যাবগুলি প্রতিস্থাপন করে?
likejudo

1
অসাধারণ! আমার জন্যও কাজ করেছেন।
নওয়াজ

1
Gg = G কী করতে পারে তা আপনি ব্যাখ্যা করতে পারেন? এটি আমি যা খুঁজছিলাম ঠিক তাই করেছিল। আমার উত্সাহে এইচটিএমএল আছে এবং আমি যখন এটি ভিমে পেস্ট করেছি, তখন এটি পাগল হয়ে গেছে। এটি এখন পরিষ্কার দেখায়।
jes516

3
@ jes516 ggআপনার কার্সারটিকে বাফারের শুরুতে নিয়ে যায়। =এটি ফর্ম্যাট, এবং একটি মুভমেন্ট কমান্ড নেয়। Gআপনার কার্সারটিকে বাফারের শেষ প্রান্তে নিয়ে যায়, তাই এটি আপনার বর্তমান বাফারের শুরু থেকে শেষ অবধি ফর্ম্যাট করতে ভিমকে বলে।
জ্যাক বিক্রেতারা

40

আপনার .vimrc এ নিম্নলিখিত লাইনগুলি যুক্ত করুন

set expandtab
set tabstop=4
set shiftwidth=4
map <F2> :retab <CR> :wq! <CR>

ভিমে একটি ফাইল খুলুন এবং এফ 2 টিপুন ট্যাবগুলি 4 টি স্পেসে রূপান্তরিত হবে এবং ফাইলটি স্বয়ংক্রিয়ভাবে সংরক্ষণ করা হবে।


এটি সম্ভবত লক্ষ্য করার মতো যে qফাইলটি ফাইলের বর্তমান বাফারটিও বন্ধ করে দেবে। এটি পছন্দসই বা নাও থাকতে পারে।
উইলেম ভ্যান কেটভিচ

14

আপনি যদি \t8 টি স্পেসের সমান রাখতে চান তবে সেটিংটি বিবেচনা করুন:

   set softtabstop=2 tabstop=8 shiftwidth=2

এটি আপনাকে প্রতি <TAB>প্রেসে দুটি স্থান দেবে , তবে \tআপনার কোডটিতে এখনও 8 টি অক্ষর হিসাবে দেখা হবে।


উল্লেখ করার জন্য ধন্যবাদ softtabstop, একটি হত্যাকারী বৈশিষ্ট্য, আমি মনে করি।
মার্টিন উডিং


4

আপনার ফাইলে ট্যাবগুলির জন্য প্রথম সন্ধান করুন: / ^ I: সেট এক্সটেনডট্যাব: retab

কাজ করবে.


প্রথম অংশটি আপনি দয়া করে এটি ব্যাখ্যা করতে পারেন
শে

3

এই নিবন্ধটিতে ট্যাবগুলি + স্পেসগুলি পরিচালনা করার এবং তাদের মধ্যে রূপান্তর করার জন্য একটি দুর্দান্ত ভিম্রিসি স্ক্রিপ্ট রয়েছে।

এই আদেশগুলি সরবরাহ করা হয়:

স্পেস 2 ট্যাব স্পেসগুলি কেবলমাত্র ইনডেন্টে ট্যাবগুলিতে রূপান্তর করে।

ট্যাব 2 স্পেস কেবলমাত্র ইনডেন্টে ট্যাবগুলিকে স্পেসে রূপান্তর করুন।

RetabIndent এক্সিকিউট স্পেস 2 ট্যাব (যদি 'প্রসারিত ট্যাব সেট করা থাকে), বা ট্যাব 2 স্পেস (অন্যথায়)।

প্রতিটি কমান্ড একটি যুক্তি গ্রহণ করে যা একটি ট্যাব কলামে ফাঁকের সংখ্যা নির্দিষ্ট করে। ডিফল্টরূপে, 'ট্যাবস্টপ' সেটিংস ব্যবহার করা হয়।

সূত্র: http://vim.wikia.com/wiki/Super_retab#Script

" Return indent (all whitespace at start of a line), converted from
" tabs to spaces if what = 1, or from spaces to tabs otherwise.
" When converting to tabs, result has no redundant spaces.
function! Indenting(indent, what, cols)
  let spccol = repeat(' ', a:cols)
  let result = substitute(a:indent, spccol, '\t', 'g')
  let result = substitute(result, ' \+\ze\t', '', 'g')
  if a:what == 1
    let result = substitute(result, '\t', spccol, 'g')
  endif
  return result
endfunction

" Convert whitespace used for indenting (before first non-whitespace).
" what = 0 (convert spaces to tabs), or 1 (convert tabs to spaces).
" cols = string with number of columns per tab, or empty to use 'tabstop'.
" The cursor position is restored, but the cursor will be in a different
" column when the number of characters in the indent of the line is changed.
function! IndentConvert(line1, line2, what, cols)
  let savepos = getpos('.')
  let cols = empty(a:cols) ? &tabstop : a:cols
  execute a:line1 . ',' . a:line2 . 's/^\s\+/\=Indenting(submatch(0), a:what, cols)/e'
  call histdel('search', -1)
  call setpos('.', savepos)
endfunction

command! -nargs=? -range=% Space2Tab call IndentConvert(<line1>,<line2>,0,<q-args>)
command! -nargs=? -range=% Tab2Space call IndentConvert(<line1>,<line2>,1,<q-args>)
command! -nargs=? -range=% RetabIndent call IndentConvert(<line1>,<line2>,&et,<q-args>)

আমি যখন প্রথম প্রথম কোনও সমাধান অনুসন্ধান করতে গিয়েছিলাম তখন উত্তরগুলির তুলনায় এটি আমাকে আরও কিছুটা সাহায্য করেছিল।


3

expandট্যাবগুলিকে স্পেসে রূপান্তর করতে একটি ইউনিক্স ইউটিলিটি। আপনি যদি setভিমে কিছু না চান , আপনি ভিএম থেকে শেল কমান্ড ব্যবহার করতে পারেন:

:!% expand -t8

1
আপনি যদি কেবল কোডটির একটি অংশ প্রসারিত করতে চান: প্রথমে ভিজ্যুয়াল মোডে সেই অংশটি নির্বাচন করুন, তারপরে টিপুন :। এখন ভিএম কমান্ড লাইনটি প্রদর্শন করে :'<,'>। তারপরে !expand -t44 স্পেসে ট্যাব ইনপুট করুন । (ফলাফল প্রাপ্ত কমান্ড লাইনটি এরকম :'<,'>!expand -t4)
পেঙ্গে গেঞ্জ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.