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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top