¿Cómo volver al primer carácter en la línea de comando * nix?

17

Al escribir un comando largo en la línea de comando * nix y tener que volver al primer carácter, para agregar algo al principio (por ejemplo nohup, a , cuando se da cuenta de que el proceso será largo, o a sudo, cuando tenga en cuenta que necesita permisos de root) puede tomar mucho tiempo para que el cursor regrese al primer carácter ...

¿Hay un atajo que te permita saltar directamente allí?

Estoy usando una Mac, así Homeque no es una opción

clami219
fuente
2
Si está en una computadora portátil Apple, Fn + Izquierda / Derecha son equivalentes a Inicio / Fin. (Y, en relación, Fn + Arriba / Abajo son PageUp / Down.)
duskwuff -inactive-
2
Para aquellos que leen esta pregunta, en realidad se trata de la shell, más específicamente de la edición de línea de comandos en la shell. La respuesta Ctrl-A anterior es bash (muy probablemente) con la edición de estilo Emacs, el valor predeterminado.
Rich Homolka
44
Una alternativa si solo necesita agregar sudoes escribir sudo !!. El !!se reemplaza con el comando anterior.
Matthew Crumley

Respuestas:

29

Ctrl+ADeberia trabajar. Ctrl+Ecorresponde al final de la línea de comando.

choroba
fuente
1
¡Excelente! Esto funciona perfectamente también en mac!
clami219
1
Esto también se aplica en muchos editores de código.
Jwosty
2
@ clami219: en realidad funciona en la mayoría de los contextos de texto en OSX. Los enlaces de Emacs son algo maravilloso ...
tommyo 01 de
Gracias, también funciona en Linux.
Gideon Babu el
10

Esto depende del shell en cuestión.

Algunos shells (como AT&T ksh88) prácticamente no ofrecen edición de línea de entrada.

En los shells que implementan la viedición en modo (puede que tenga que habilitar esto con set -o vi), esto se hace presionando Esc(para cambiar del modo de inserción) seguido de 0saltar al comienzo de la línea o $saltar al final de la línea. Luego, vuelva a ingresar al modo de inserción presionando i- el cursor permanecerá donde está - o a- el cursor se moverá uno hacia la derecha para agregar texto.

vi La edición de modo ha sido ordenada recientemente por el estándar POSIX.

El modo de edición mucho más común emacs (gracias a Dios, no tiene nada que ver con el editor-slash-operating-system-sistema de Emacs) utiliza Ctrl-Apara saltar al principio de la línea y Ctrl-Eal final de la línea. Este modo requiere que se ejecute set -o emacsen muchos shells (principalmente AT&T ksh93) pero está habilitado de forma predeterminada en mksh y GNU bash.

La mayoría de los proyectiles modernos admiten ambos modos emacsy vimodos. (Ambos modos requieren un tty para funcionar).

En muchos shells, puede personalizar las combinaciones de teclas; generalmente para el emacsmodo, aunque algunos shells también permiten personalizar la combinación de teclas para el vimodo. Si tiene una clave a la que preferiría vincularla, primero debe averiguar las secuencias de teclas que produce (por ejemplo, en mi sistema, Alt-CursorLeftproduce Esc+[+1+;+3+D( ^[[1;3D; ^Xes Ctrl-Xy ^[es Esc), para que pueda escribir algo como

bind '^[[1;3D=beginning-of-line'
bind '"\e[1;3D":beginning-of-line'

y cambiará esta combinación de teclas, dependiendo del shell. Por lo general, puede conservarlos en el archivo de inicio ( ~/.mkshrc, ~/.kshrc) o, para GNU bash, en ~/.inputrc. Tenga en cuenta que no todos los shells admiten vincular todas las claves en todas las versiones.

Por lo general, puede averiguar qué caracteres genera una clave simplemente ejecutando caten el shell, escribiendo la tecla y observando. Luego presione ^C( Ctrl-C) para abortar cat.

mirabilos
fuente
Me gusta usar ^ D, el carácter de línea final de Unix, para terminar con cat. En mi opinión, es ^ D porque el flujo de texto está "hecho".
Aaron Hall
@AaronHall: eso no funcionará si ya hay algo en juego. Además, queremos abortarlo, no terminarlo ;-) Pero sí, en el caso normal tienes razón. Pero este es un caso especial.
mirabilos
El terminal también puede editar líneas.
Samuel Edwin Ward,
@mirabilos Para enviar un EOF sin una nueva línea, simplemente haga ^ D ^ D (es decir, presione D dos veces).
Potatoswatter
@Potatoswatter sí (divertido, yo tampoco lo sabía), pero específicamente quiero abortar aquí. Cuando envío ^D^Dtodavía recibo "la basura" hizo eco ...
mirabilos
2

¿Has probado la tecla de inicio? Utilizo MobXterm para conectarme a Linux Box y utilizo las teclas Inicio y Fin en el teclado para ir al primer o último carácter del comando.

PAS
fuente
¡Tienes razón! Tenía que especificar que estoy usando una Mac ...
clami219
2

Si ha cambiado al vimodo, usando set -o vi, puede presionar Escy Io Aingresar texto al comienzo o al final de la línea. O si solo está buscando mover el cursor, es ^y $.

TankorSmash
fuente
modo vi de qué shell?
David Richerby
2

En el modo emacs (cambiado por:) set -o emacses presionando:

  • Ctrl+A y Ctrl+E
  • Home y End
  • Esc+by Esc+f(mueve el cursor hacia atrás y hacia adelante de la palabra actual)

En modo vi (cambiado por:) set -o vicuando está en modo comando ( Esc) es presionando:

  • 0/ ^y $(permanecerá en modo comando)
  • Iy A(cambiará al modo de edición)

Ver también:

kenorb
fuente