سؤال
أود أن تحويل التبويب المسافات في 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>)
هذا ساعدني قليلا أكثر من الإجابات هنا هل عندما ذهبت لأول مرة في البحث عن الحل.