tutorial para mac descargar commands comandos vim

para - vim pdf



Cambiar sangría de 2 espacios a 4 espacios en vim (7)

He copiado algunos códigos de Internet que tienen sangría de dos espacios y quiero cambiarlos por sangría de 4 espacios. Me pregunto si hay una rutina vim corta para realizar la tarea sin tener que escribir el script vim. Así es como lo estoy haciendo actualmente con un archivo HTML:

  • Graba una macro
  • Ir al comienzo de una línea
  • Visual seleccionar todos los espacios en blanco hasta la primera aparición de "<"
  • Yank y pega todos los espacios en blanco (básicamente para duplicarlos)
  • Reproduce la macro hasta el final del archivo

En resumen qa0vt<yp<esc>jq

Escollos:

La macro falla para una línea en blanco o una línea que no comienza con "<". Y no tengo idea de cómo extender esta solución a un archivo que no sea HTML.


Esta es una pregunta muy antigua, sin embargo, todas las respuestas son ... incorrectas ... Vim tiene una manera muy fácil de reinventar todo el archivo. Aprendí esto después de escribir mi propia función para hacerlo, así que estoy en el mismo barco de ignorancia;)

tipo

gg=G

esto supone que tiene su tabulación establecida en lo que le gusta, (por lo que para el OP sería ts = 4)

Aprendí esto de http://vim.wikia.com/wiki/Fix_indentation , que menciona

En modo normal, tipear gg = G reiniciará todo el archivo. Este es un caso especial; = es un operador. Al igual que d o y, actuará en cualquier texto que mueva con un comando de movimiento del cursor. En este caso, gg coloca el cursor en la primera línea, luego = G reendenta desde la posición actual del cursor hasta el final del búfer.


Esta es una variante de las respuestas basadas en expresiones regulares.

Tengo un script bash en mi directorio bin local que duplicará la cantidad de espacios en blanco al comienzo de una línea. La entrada puede ser stdin o un archivo:

$ cat ~/bin/dblsp #!/bin/bash file=${1--} while IFS= read -r line; do echo "$line" | sed ''s//s*/&&/'' done < <(cat -- "$file")

Utilizo esto dentro de vim seleccionando visualmente una línea y emitiendo el siguiente comando:

:''<,''>!dblsp

Esto me ahorra la necesidad de escribir (o recordar) la expresión regular.

También lo uso en mapas como el siguiente:

nnoremap <leader>] `[V`]!dblsp<CR>

que lo aplicará a un bloque de texto pegado recientemente. Usualmente uso el siguiente mapa para pegar en lugar de :set paste

nnoremap <leader>p :r !xclip -o<CR>

Mi flujo de trabajo habitual es:

  • seleccione fragmento de código (por ejemplo, el código de ejemplo en esta página es de 2 espacios, pero quiero 4)
  • pegar fragmento de código (, p)
  • cambiar el espaciado (,)

o simplemente cambiando la sangría en los bloques extraídos pegados desde otro buffer.


Lo que hago es muy similar a los enfoques de esneider y cforbish, pero un poco más rápido para escribir:

:%s/^/s*/&&

Simplemente reemplaza el espacio inicial (espacios o pestañas) con el doble de espacio inicial ( & se sustituye por la expresión coincidente).


Puede ser posible con :set shiftwidth=4 y gg=G


Similar (pero algo más simple) a la respuesta de cforbish, esta expresión regular duplicará los espacios iniciales

:%s/^/( /+/)//1/1

O puede usar esta otra expresión regular para transformar 2 espacios en 4 espacios, preservando espacios individuales (y montos impares en general)

:%s/^/(/( /)/+/)//1/1

Es decir,

  • 1 espacio ⇢ 1 espacio
  • 2 espacios ⇢ 4 espacios
  • 3 espacios ⇢ 5 espacios
  • 4 espacios ⇢ 8 espacios

Una forma general de cambiar la sangría es cambiando la pestaña:

Pegue su archivo en un búfer vacío, luego:

:set ts=2 sts=2 noet :retab!

Esto cambia cada 2 espacios a un caracter TAB, luego:

:set ts=4 sts=4 et :retab

Esto cambia cada TAB a 4 espacios.

La ventaja de este método es que también puede usarlo al revés, para convertir de 4 a 2 espacios, por ejemplo.


Utilicé esta expresión regular (duplica la cantidad de espacios iniciales):

%s;^/(/s/+/);/=repeat('' '', len(submatch(0))*2);g