Sostituisci le schede con spazi in vim
Domanda
Vorrei convertire la scheda in spazi in gVim. Ho aggiunto la seguente riga al mio _vimrc
:
set tabstop=2
Funziona per fermarsi in due spazi ma sembra ancora che sia inserito un tasto tab (ho provato a usare il tasto h per contare gli spazi in seguito).
Non sono sicuro di cosa dovrei fare per convertire gVim in spazi?
Soluzione
IIRC, qualcosa del tipo:
set tabstop=2 shiftwidth=2 expandtab
dovrebbe fare il trucco. Se hai già delle schede, seguila con una bella RE globale per sostituirle con doppi spazi.
Altri suggerimenti
Dopo aver attivato la scheda di espansione secondo le altre risposte, il modo estremamente conveniente per convertire i file esistenti in base alle nuove impostazioni è:
:retab
Funzionerà sul buffer corrente.
Prova
set expandtab
per le schede soft.
Per correggere le schede preesistenti:
:%s/\t/ /g
Ho usato due spazi poiché hai già impostato il tabstop su 2 spazi.
Questo ha funzionato per me:
puoi vedere le schede prima facendo questo:
:set list
quindi per rendere possibile la sostituzione delle schede, procedere come segue:
:set expandtab
quindi
:retab
ora tutte le schede sono state sostituite con spazi puoi quindi tornare alla visualizzazione normale in questo modo:
:set nolist
gg=G
reindirizza l'intero file e rimuove la maggior parte se non tutte le schede che ottengo nei file dai colleghi.
Aggiungi le seguenti righe al tuo .vimrc
set expandtab
set tabstop=4
set shiftwidth=4
map <F2> :retab <CR> :wq! <CR>
Apri un file in vim e premi F2 Le schede verranno convertite in 4 spazi e il file verrà salvato automaticamente.
Se vuoi mantenere \t
pari a 8 spazi, considera l'impostazione:
set softtabstop=2 tabstop=8 shiftwidth=2
Questo ti darà due spazi per <TAB>
stampa, ma l'attuale <=> nel tuo codice sarà comunque visualizzato come 8 caratteri.
prima ricerca di schede nel tuo file: / ^ I : imposta expandtab : Retab
funzionerà.
expand
è un'utilità unix per convertire le schede in spazi. Se non si desidera set
nulla in vim, è possibile utilizzare un comando shell da vim:
:!% expand -t8
Questo ha funzionato per me:
:set tabstop=2 shiftwidth=2 expandtab | retab
Questo articolo ha un eccellente script vimrc per la gestione di tabs + spazi e la conversione tra di loro.
Questi comandi sono forniti:
Space2Tab Converti gli spazi in schede, solo in rientri.
Tab2Space Converti le schede in spazi, solo in rientri.
RetabIndent Esegui Space2Tab (se è impostato 'expandtab') o Tab2Space (altrimenti).
Ogni comando accetta un argomento che specifica il numero di spazi in una colonna della scheda. Per impostazione predefinita, viene utilizzata l'impostazione "tabstop".
Fonte: 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>)
Questo mi ha aiutato un po 'più delle risposte qui quando ho cercato per la prima volta una soluzione.