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,command2solo se ejecutará si secommand1ejecuta 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 :barEjemplo:
:echo "hello" | echo "goodbye"Salida:
NB: es posible que
~/.vimrcno admita mapeo|, o\|. En estos casos, intente usar en su<bar>lugar.fuente
|!mapdeclaración (y créeme, lo harás), échale un vistazo:help map_bar..vimrcno admite una barra de escape (\|) para las asignaciones. Aprendí que realmente tengo que escribir<bar>.:help barmuestra 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_barfuente
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
^Jpara separar múltiples comandos presionando Ctrl+ v, Ctrl+ j.fuente
^Jcomo 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
ebandera 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