¿Cómo hago que vi - Vim nunca use pestañas (convertir espacios en pestañas, ¡mal!), Hace que la tecla de pestañas == 4 espacios, y automáticamente sangra el código después de bloques de llaves como lo hace Emacs ?
Además, ¿cómo guardo estas configuraciones para que nunca tenga que ingresarlas nuevamente?
He visto otras preguntas relacionadas con esto, pero siempre parece estar un poco alejado de lo que quiero.
vim
whitespace
indentation
vi
auto-indent
mmcdole
fuente
fuente
Respuestas:
Como se ha señalado en un par de respuestas a continuación, el método preferido ahora NO es usar smartindent, sino usar lo siguiente (en su .vimrc ):
En su archivo .vimrc :Los archivos de ayuda tardan un poco en acostumbrarse, pero cuanto más lees, mejor se pone Vim:
Aún mejor, puede incrustar estas configuraciones en su fuente para la portabilidad:
Para ver su configuración actual:
Como graywh señala en los comentarios, smartindent ha sido reemplazado por cindent, que "funciona de manera más inteligente", aunque todavía es principalmente para lenguajes con sintaxis tipo C:
fuente
Relacionado, si abre un archivo que usa pestañas y espacios, suponiendo que tiene
Puede reemplazar todas las pestañas con espacios en todo el archivo con
fuente
La mejor manera de obtener una sangría específica de tipo de archivo es usarla
filetype plugin indent on
en su vimrc. Luego puede especificar cosas comoset sw=4 sts=4 et
.vim / ftplugin / c.vim, por ejemplo, sin tener que hacer que sean globales para todos los archivos que se están editando y otras sintaxis de tipo no C también se sangrarán correctamente (incluso lisps) .fuente
Para tener pestañas de 4 espacios en la mayoría de los archivos, caracteres de pestañas reales de 8 anchos en Makefiles y sangría automática en varios archivos, incluido C / C ++, coloque esto en su
~/.vimrc
archivo:fuente
else
? Me parece que las últimas líneas sobrescriben el archivo MAKE específico en todos los casosEn muchos sistemas Linux, como Ubuntu, el
.vimrc
archivo no existe por defecto, por lo que se recomienda que lo cree primero.No use el
.viminfo
archivo que existe en el directorio de inicio. Se usa para un propósito diferente.Paso 1: Ve a tu directorio de inicio
cd ~
Paso 2: crea el archivo
vim .vimrc
Paso 3: agregue la configuración indicada anteriormente
Paso 3: guarde el archivo presionando Shift+ ZZ.
fuente
Shift + ZZ
creará un archivo .swp. usowq
.Ctrl-Z
es otra historia ...)vim -n <file>
. Un archivo de intercambio no es algo que se genera al guardar el tiempo; eso prácticamente anularía su propósito, ya que los archivos de intercambio se vuelven útiles para recuperar sesiones de edición terminadas abruptamente.La forma recomendada es usar sangría basada en tipos de archivo y solo usar smartindent y cindent si eso no es suficiente.
Agregue lo siguiente a su .vimrc
Espero que ayude como una respuesta diferente.
fuente
edite su ~ / .vimrc
agregue las siguientes líneas:
fuente
De la wiki de VIM :
fuente
La sangría automática se basa en el modo de sintaxis actual. Yo sé que si está editando Foo.java, a continuación, entrar en una
{
y golpear Enterguiones la siguiente línea.En cuanto a las pestañas, hay dos configuraciones. Dentro de Vim, escriba dos puntos y luego "set tabstop = 4" que configurará las pestañas para que se muestren como cuatro espacios. Vuelva a presionar dos puntos y escriba "set expandtab" que insertará espacios para pestañas.
Puede poner esta configuración en un .vimrc (o _vimrc en Windows) en su directorio de inicio, por lo que solo tiene que escribirlos una vez.
fuente
En primer lugar, no use la Tabclave en Vim para la sangría manual. Vim tiene un par de comandos en modo de inserción para aumentar o disminuir manualmente la cantidad de sangría. Esos comandos son Ctrl-Ty Ctrl-D. Estos comandos observan los valores de
tabstop
,shiftwidth
yexpandtab
, y mantienen la combinación correcta de espacios y pestañas (número máximo de pestañas seguido de cualquier número necesario de espacios).En segundo lugar, estas teclas de sangría manual no tienen que usarse mucho de todos modos si usa una sangría automática.
Si en Ctrl-Tlugar de Tabmolestarte, puedes reasignarlo:
También puede reasignar Shift-Tabpara hacer el Ctrl-Ddeindent:
Aquí ^ T y ^ D son caracteres de control literales que se pueden insertar como Ctrl-VCtrl-T.
Con esta asignación en su lugar, aún puede escribir Tab literal en el búfer usando Ctrl-VTab. Tenga en cuenta que si hace esto, incluso si
:set expandtab
está activado, obtendrá un carácter de tabulación sin expandir.Se
<Tab>
logra un efecto similar al del mapa:set smarttab
, lo que también hace que el retroceso en el frente de una línea se comporte de manera inteligente.En
smarttab
modo, cuando no Tabse usa al comienzo de una línea, no tiene un significado especial. Eso es diferente de mi mapeo anterior de Taba Ctrl-T, porque un Ctrl-Tusado en cualquier parte de una línea (en modo de inserción) aumentará la sangría de esa línea.Otras asignaciones útiles pueden ser:
Ahora podemos hacer cosas como seleccionar algunas líneas y presionar Tabpara sangrarlas. O presione Tabdos veces en una línea (en modo comando) para aumentar su sangría.
Si utiliza los comandos apropiados de gestión de la sangría, entonces todo está controlado por los tres parámetros:
shiftwidth
,tabstop
yexpandtab
.El
shiftwidth
parámetro controla el tamaño de la sangría; si desea cuatro sangrías de espacio, use:set shiftwidth=4
o la abreviatura:set sw=4
.Si solo se hace esto, se creará una sangría usando una mezcla de espacios y pestañas, porque
noexpandtab
es el valor predeterminado. Uso:set expandtab
. Esto hace que los caracteres de tabulación que escribe en el búfer se expandan en espacios y que la sangría administrada por Vim use solo espacios.Cuando
expandtab
está activado, y si administra su sangría a través de todos los mecanismos Vim adecuados, el valor de setabstop
vuelve irrelevante. Controla cómo aparecen las pestañas si ocurren en el archivo. Si tieneset tabstop=8 expandtab
y luego introduce una pestaña dura en el archivo usando Ctrl-VTab, producirá una alineación a la siguiente posición de pestaña basada en 8 columnas, como de costumbre.fuente
<C-t>
puede usar esa sintaxis en lugar de literales. Por último, el mapeo<Tab>
en modo normal también mapeará<C-i>
(son el mismo personaje), por lo que no recomiendo que (pierdas una pieza ingeniosa de funcionalidad vim