Reemplazar pestañas con espacios en vim
Pregunta
Me gustaría convertir la pestaña a espacios en gVim. Agregué la siguiente línea a mi _vimrc
:
set tabstop=2
Funciona para detenerse en dos espacios, pero todavía parece que se ha insertado una tecla de tabulación (intenté usar la tecla h para contar espacios después).
No estoy seguro de qué debo hacer para que gVim convierta pestañas en espacios.
Solución
IIRC, algo así como:
set tabstop=2 shiftwidth=2 expandtab
debería hacer el truco. Si ya tiene pestañas, siga con un buen RE global para reemplazarlos con espacios dobles.
Otros consejos
Una vez que haya expandido la pestaña según las otras respuestas, la forma extremadamente conveniente de convertir archivos existentes de acuerdo con su nueva configuración es:
:retab
Funcionará en el búfer actual.
Probar
set expandtab
para pestañas suaves.
Para arreglar pestañas preexistentes:
:%s/\t/ /g
Utilicé dos espacios ya que configuraste tu tabulación en 2 espacios.
Esto funcionó para mí:
puedes ver pestañas con esto primero:
:set list
luego para que sea posible reemplazar pestañas, haga esto:
:set expandtab
luego
:retab
ahora todas las pestañas han sido reemplazadas por espacios luego puede volver a la visualización normal de esta manera:
:set nolist
gg=G
reindentará todo el archivo y eliminará la mayoría, si no todas, las pestañas que obtengo en los archivos de mis compañeros de trabajo.
Agregue las siguientes líneas a su .vimrc
set expandtab
set tabstop=4
set shiftwidth=4
map <F2> :retab <CR> :wq! <CR>
Abra un archivo en vim y presione F2 Las pestañas se convertirán a 4 espacios y el archivo se guardará automáticamente.
Si desea mantener su \t
igual a 8 espacios, considere configurar:
set softtabstop=2 tabstop=8 shiftwidth=2
Esto le dará dos espacios por <TAB>
pulsación, pero los <=> reales en su código aún se verán como 8 caracteres.
primero busque pestañas en su archivo: / ^ I : establecer expandtab : retab
funcionará.
expand
es una utilidad de Unix para convertir pestañas en espacios. Si no quiere set
nada en vim, puede usar un comando de shell desde vim:
:!% expand -t8
Esto me funcionó:
:set tabstop=2 shiftwidth=2 expandtab | retab
Este artículo tiene un excelente script vimrc para manejar pestañas + espacios y convertirlos entre ellos.
Estos comandos se proporcionan:
Space2Tab Convierta espacios en pestañas, solo en sangría.
Tab2Space Convertir pestañas a espacios, solo en sangría.
RetabIndent Ejecute Space2Tab (si se establece 'expandtab') o Tab2Space (de lo contrario).
Cada comando acepta un argumento que especifica el número de espacios en una columna de tabulación. De forma predeterminada, se utiliza la configuración de "tabulación".
Fuente: 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>)
Esto me ayudó un poco más que las respuestas aquí cuando busqué una solución por primera vez.