Dividir una línea de comando de solicitud existente en unas pocas líneas

8

Entiendo que puedo escribir \ enteral final de una bashlínea de comando para continuar ese comando en otra línea. Pero, ¿cómo puedo dividir una línea de comando de solicitud , que ya se ha escrito completamente, en dos?

Por ejemplo, ¿cómo puedo romper esta línea justo antes thensin tener que cortar el resto y escribirlo de nuevo?

$ if true; then ls; fi
nr
fuente
1
Si está en una línea de comandos interactiva, ¿hay alguna razón en particular que necesite hacer esto además de hacer que su historial de shell se vea más bonito? Funcionalmente, las nuevas líneas adicionales no hacen ninguna diferencia en el shell. Si está escribiendo un fragmento de shell largo y complejo, es mejor usar un editor. Mire también el fccomando: está disponible en casi todos los shells.
jw013 18/0613
No es más bonito, sino solo para que los comandos complejos sean legibles.
nr

Respuestas:

4

Un carácter de nueva línea es LF (avance de línea), también conocido como Control-J. Si presiona Ctrl+ J, esto ejecuta el comando accept-line, igual que la Returntecla. Para insertar un carácter LF literal, presione Ctrl+ V Ctrl+ J. El comando Ctrl+ V( quoted-insert) inserta el siguiente carácter literalmente. Por lo tanto, para dividir una línea, puede ingresar \ Ctrl+ V.

Si haces esto a menudo, puedes convertirlo en una macro:

bind '"\e\C-j": "\\\C-v\C-j\C-b\C-b"'
Gilles 'SO- deja de ser malvado'
fuente
6

Puede usar edit-and-execute-command, generalmente asignado a Ctrl+ x+ e, para abrir el comando actual en un editor . Al salir del editor, se ejecutará el comando.

l0b0
fuente
1
Agradable, nunca supe esto. Tendrá que asegurarse de que su $ variable de entorno EDITOR se establece en algo - añadí vima la mía, así: export EDITOR=vim.
slm
1
¿Cómo puedo cancelar la ejecución del comando al salir del editor? Yo uso :q!o no, ZQpero fue en vano.
Birei
1
@Birei: elimine todas las líneas, luego guárdelas y salga (por ejemplo , ggdG:wqo :%d|wq, etc.). El comando permanecerá en el historial (posiblemente como un duplicado si lo recuperó de una entrada anterior), pero no se ejecutará.
Pausado hasta nuevo aviso.
@DennisWilliamson: ¡Guau! Casi tres años después, aún no había resuelto este problema, muchas gracias porque la solución era muy simple y la simplicidad siempre es mejor.
Birei
2

Nota: esta respuesta es específica para vi y vim

set -o vi    # edit commands using vi
VISUAL=/usr/bin/vim

Para editar la línea mecanografiada actual, golpeó ESC(para entrar en vio vimmodo de comando), a continuación, escriba vo vi.

Tenga en cuenta que todos los comandos de edición vi / vim funcionan. p.ej

  • ESC+ A pone al final de la línea escrita actual.
  • ESC+ 0 coloca el cursor al comienzo de la línea.
sospechoso
fuente
Excelente. Esto definitivamente hace que la edición de líneas de comando sea mucho más fácil. Pero, ¿sabes cómo insertar un nuevo carácter de línea sin entrar en modo visual?
n.
2
Gracias. CTRL+ vluego CTRL+ jpara lanzar una nueva línea debería funcionar.
sospechoso