He estado tratando de encontrar algo que me permita ejecutar múltiples comandos en la misma línea en Vim, similar al uso de punto y coma para separar los comandos en los sistemas * nix o &
en Windows. ¿Hay alguna forma de hacer esto?
188
;
lugar de&&
separar los comandos de shell de Unix también!&&
es 'booleano y' en los comandos de shell, por lo que si lo tienecommand1 && command2
,command2
solo se ejecutará si secommand1
ejecuta con éxito. con;
solo especificas manualmente el final de esa línea y comienzas una nueva. Es lo mismo que escribir cada comando en una línea diferente en un script de shell.Respuestas:
Una barra
|
te permitirá hacer esto. De:help :bar
Ejemplo:
:echo "hello" | echo "goodbye"
Salida:
NB: es posible que
~/.vimrc
no admita mapeo|
, o\|
. En estos casos, intente usar en su<bar>
lugar.fuente
|
!map
declaración (y créeme, lo harás), échale un vistazo:help map_bar
..vimrc
no admite una barra de escape (\|
) para las asignaciones. Aprendí que realmente tengo que escribir<bar>
.:help bar
muestra motion.txt y nada sobre múltiples comandos.:help <bar>
Poner
<CR>
(Carriage Return / Enter) entre y después de los comandos. Por ejemplo:No lo uses
|
porque:Algunos comandos tienen problemas si los usas
|
después|
no funciona de manera consistente en los archivos de configuración, vea:help map_bar
fuente
Podría definir una función que ejecute sus comandos.
Y coloque esto en, por ejemplo, su vimrc. Ejecute la función con
fuente
:call Func()
porque:execute Func()
significa algo más. Significa realizar el valor de retorno de la función como un comando. La función descrita aquí generalmente no tendrá un comando que comience:return
, por lo que su valor de retorno será el número cero. Ejecutar eso como un comando moverá el cursor a la primera línea del búfer actual, que no siempre es lo que tenía en mente.El separador de comandos en vim es
|
.fuente
Siempre he usado
^J
para separar múltiples comandos presionando Ctrl+ v, Ctrl+ j.fuente
^J
como separador de comandos en una cadena porque está insertando el carácter NULL que termina la cadena. sin embargo, puede usar <CR> = "\ n".exe "echo 'foo' \n echo 'bar'"
exe "echo 'foo'" . nr2char(0x0a) . "echo 'bar'"
map aa :echo 'foo' <C-V><C-J> echo 'bar'<CR>
Pensé que esto podría ayudar a alguien que intenta hacer sustituciones en una cadena y uno falla
de un comentario
Puede usar la
e
bandera para ignorar el error cuando no se encuentra la cadena.fuente
Puede crear un nuevo archivo y escribir sus comandos en él. Entonces
:so %
, lo que significa el archivo actual de origen.fuente