سؤال

أود أن تحويل التبويب المسافات في gVim.لقد تم إضافة السطر التالي إلى _vimrc:

set tabstop=2

يعمل التوقف عند موقفين لكنه لا يزال يبدو وكأنه علامة تبويب واحدة يتم إدخال المفتاح (حاولت استخدام المفتاح h لحساب المساحات بعد ذلك).

لست متأكدا ما يجب القيام به لجعل gVim تحويل علامات التبويب إلى المرافق ؟

هل كانت مفيدة؟

المحلول

وIIRC، شيء من هذا القبيل:

set tabstop=2 shiftwidth=2 expandtab

وينبغي أن تفعل خدعة. إذا كان لديك بالفعل علامات التبويب، ثم متابعة هذا الامر مع RE العالمي لطيفة لتحل محلها مع مسافات مزدوجة.

نصائح أخرى

وبمجرد أن حصلت على expandtab على حسب إجابات أخرى، وسيلة مريحة للغاية لتحويل الملفات الموجودة وفقا للإعدادات الجديدة هي:

:retab

وانها ستعمل على المخزن المؤقت الحالي.

وحاول

set expandtab

ولعلامات التبويب لينة.

لإصلاح علامات التبويب الموجودة مسبقا:

:%s/\t/  /g

واعتدت مسافتين منذ كنت بالفعل تعيين tabstop ل2 مسافات.

وهذا عمل بالنسبة لي:

ويمكنك ان ترى علامات التبويب مع القيام بذلك أولا:

:set list

وبعد ذلك لتجعل من الممكن استبدال علامات التبويب ثم قيام بذلك:

:set expandtab

ثم

:retab

والآن تم استبدال كافة علامات التبويب بمسافات يمكنك ثم العودة إلى العرض العادي مثل هذا:

:set nolist

وgg=G سوف reindent الملف بأكمله ويزيل معظم إن لم يكن جميع علامات التبويب I الحصول على الملفات من زملاء العمل.

إضافة الأسطر التالية إلى .vimrc بك

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

وفتح ملف في همة واضغط F2 سيتم تحويل علامات التبويب إلى 4 المساحات وسيتم حفظ الملف تلقائيا.

إذا كنت تريد أن تبقي \t بك يساوي 8 المساحات ثم النظر في الإعداد:

   set softtabstop=2 tabstop=8 shiftwidth=2

وهذا سوف تعطيك مسافتين في الصحافة <TAB>، ولكن لا يزال يتم عرضه \t الفعلية في التعليمات البرمجية إلى 8 أحرف.

والبحث الأول لعلامات التبويب في الملف الخاص بك: / ^ I : مجموعة expandtab : retab

وسوف يعمل.

وexpand هو أداة يونكس لتحويل علامات التبويب إلى مسافات. إذا كنت لا تريد أن set أي شيء في همة، يمكنك استخدام أمر قذيفة من همة:

:!% expand -t8

وحصلت هذا هو العمل بالنسبة لي:

:set tabstop=2 shiftwidth=2 expandtab | retab

هذه المقالة ممتازة vimrc النصي للتعامل مع علامات+مساحات وتحويل بينهما.

هذه الأوامر هي المقدمة:

Space2Tab تحويل المساحات علامات التبويب فقط في المسافات البادئة.

Tab2Space تحويل علامات التبويب المسافات فقط في المسافات البادئة.

RetabIndent تنفيذ Space2Tab (إن 'expandtab' هو مجموعة) ، أو Tab2Space (وإلا).

كل أمر يقبل حجة التي تحدد عدد الأماكن في علامة التبويب العمود.بشكل افتراضي ، 'tabstop' وضع المستخدم.

المصدر: 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>)

هذا ساعدني قليلا أكثر من الإجابات هنا هل عندما ذهبت لأول مرة في البحث عن الحل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top