¿Cuál es la mejor manera de moverse en un muy largo de la línea de comandos en el terminal?

Decir que se utiliza la tecla de flecha o CtrlR para obtener esta larga línea de comandos:

./cmd --option1 --option2 --option3 --option4 --option5 --option6 --option7 --option8 --option9 --option10 --option11 --option12 --option13 --option14 --option15 --option16 --option17 --option18 --option19 --option20 --option21 --option22 --option23 --option24 --option25 --option26 --option27 --option28 --option29 --option30 --option31 --option32 --option33 --option34 --option35 --option36 --option37 --option38 --option39 --option40 --option41 --option42 --option43 --option44 --option45 --option46 --option47 --option48 --option49 --option50 

Ahora tengo que mover (desde el inicio o el final de la línea) el cursor a --option25 modificar algo allí.

¿Cuál es la manera más rápida para llegar allí? Lo que suele hacer es CtrlUn para llegar al principio y luego repetidamente AltF para mover hacia adelante, palabra por palabra (o CtrlE para ir a la final y AltB para luego ir hacia atrás). Pero en una larga línea que toma demasiado tiempo. Debe haber una forma de buscar y saltar directamente a la parte en que tengo que modificar, por ejemplo,option25?

InformationsquelleAutor Frank | 2009-03-18

13 Comentarios

  1. 100

    Ya que este no ha sido cerrado, sin embargo, aquí están algunas opciones más.

    • Uso Ctrl+x seguido por Ctrl+e para abrir la línea actual en el editor especificado por $FCEDIT o $EDITOR o emacs (probado en ese orden).
    • Si se ejecutó el comando anterior, pulse Ctrl+r para invertir la historia de la búsqueda y el tipo de option25 (en este caso). La línea se mostrará. Pulse Ficha para empezar a editar en este punto.
    • Uso de la historia de la expansión con la s/// modificador. E. g. !-2:s/--option25/--newoption/ podría volver a ejecutar el segundo al último comando, pero reemplazar option25. Modificar el último ./cmd de comandos, utilice el !string sintaxis: !./cmd:s/--option25/--newoption/

      Cualquier delimitador puede ser utilizado en lugar de /en la sustitución.
    • Si la edición de la línea anterior, usted puede usar la rápida sustitución: ^--option25^--newoption
    • De búsqueda de caracteres. Esto fue mencionado por Pax, y se puede hacer en regular emacs-modo con Ctrl+] para la búsqueda hacia delante, y Ctrl+Alt+] para atrás de búsqueda.

    Recomiendo la segunda opción. Ctrl+r es muy práctico y rápido, no ensuciar alrededor con los editores, y ver los resultados antes de que se ejecuta el comando (a diferencia de la historia de las expansiones).

    • Gracias! C-x C-e es genial!!!
  2. 186

    Que quede claro, no quiero un «camino rápido para mover el cursor en una terminal línea de comandos».
    Lo que realmente queremos es una forma rápida de navegar a través de línea de comandos en la que shell programa.

    Bash es muy común shell, por ejemplo.
    Utiliza Readline biblioteca para implementar entrada de línea de comandos. Y, por así decirlo, es muy conveniente saber Readline enlaces, ya que no sólo se usa en bash. Por ejemplo, gdb también utiliza Readline para procesar la entrada.

    En Readline documentación usted puede encontrar toda la navegación relacionadas con los enlaces (y más):
    http://www.gnu.org/software/bash/manual/bash.html#Readline-Interaction

    Corto copiar-pegar el enlace de arriba baja:

    Bare Essentials

    • Ctrl-b retroceder un carácter.
    • Ctrl-f Moverse un carácter hacia atrás.
    • [SUPR] o [Retroceso] borra el carácter a la izquierda del cursor.
    • Ctrl-d borra el carácter bajo el cursor.
    • Ctrl-_ o C-x C-u Deshacer el último comando de edición. Usted puede deshacer todo el camino de regreso a una línea de vacío.

    Movimiento

    • Ctrl-a Mover al inicio de la línea.
    • Ctrl-e ir al final de la línea.
    • Meta-f avanzar una palabra, cuando una palabra se compone de letras y dígitos.
    • Meta-b retroceder una palabra.
    • Ctrl-l Borrar la pantalla, reimpresión de la actual línea en la parte superior.

    Matar y tirar de

    • Ctrl-k Matar el texto desde la posición actual del cursor hasta el final de la línea.
    • M-d Matar desde el cursor hasta el final de la palabra actual, o si entre las palabras, al final de la siguiente palabra. Los límites de la palabra son los mismos que los utilizados por la M-f.
    • M-[SUPR] Matar desde el cursor al inicio de la palabra actual, o si entre las palabras, al principio de la palabra anterior. Los límites de la palabra son los mismos que los utilizados por la M-b.
    • Ctrl-w Matar desde el cursor hasta el espacio en blanco anterior. Esto es diferente de M – debido a los límites de palabras diferentes.
    • Ctrl-y Tirar de la mayoría de los asesinados recientemente texto nuevo en el búfer en el cursor.
    • Mi Rotar el kill-ring, y tirar de la nueva tapa. Usted sólo puede hacer esto si el comando anterior es C-y o a Mi.

    M es clave Meta.
    Para Max OS X, el Terminal puede habilitar el «Uso de la opción como meta clave» en Ajustes/Teclado.
    Para Linux de sus más complicado.

    Actualización

    Tenga en cuenta también, que Readline puede funcionar en dos modos:

    • modo de emacs (que es el predeterminado)
    • vi modo de

    Para cambiar Bash a usar vi en modo:

    $ set -o vi

    Personalmente prefiero vi modo ya que yo uso vim para editar el texto.

    Bono

    En macOS aplicación Terminal (y en iTerm demasiado) usted puede Opción y haga Clic en para mover el cursor (cursor se moverá a la posición del clic). Esto funciona incluso en el interior de vim.

    • Me quedo con esta respuesta porque se pone abajo de la [esencia/root/razón detrás] cómo bash entrada de teclado funciona(de donde viene), es decir, Readline.
    • En el estándar de Ubuntu terminal, Meta (M) es Alt+Shift, a menos que deshabilite el acceso al menú de atajos de teclado en cuyo caso es simplemente la tecla Alt.
    • En Konsole de Kde en la Meta (M) es la tecla alt
    • El problema es que Meta+F no funciona si la Meta es ALT desde ALT da acceso al menú del programa en ejecución (en este caso de la terminal). ¿Hay alguna alternativa?
    • Gracias, gran vi el modo!
    • ¿qué es M-f, para que no use el control aquí, entonces ¿qué es?
    • Para iTerm, Meta clave es que no funciona hasta que establecer las Preferencias > Perfiles > Default > Llaves > a la Izquierda/Derecha tecla de opción actúa como +Esc
    • ¿Qué hace el C representan? Esto no es Ctrl o C es?

  3. 27

    Mantenga presionada la tecla Opción y haga clic donde desea que el cursor se mueva, y el Terminal corre el cursor en que lugar preciso.

    • Que acabamos de duplicar mi eficiencia
    • En los entornos que hace este trabajo? Supongo que en Mac OS?
    • Puedo hacer esto en Mac. nunca se trató en cualquier otro sistema operativo
    • Trabaja en remoto ssh de linux, incluso a través de un servidor de salto.
  4. 10

    Tiendo a preferir vi el modo de edición (ya que esas pulsaciones están incrustados en mi médula espinal ahora (el cerebro no se utiliza en absoluto), junto con el CTRL + K, CTRL-X de WordStar 3.3 :-). Usted puede utilizar la línea de comandos set -o vi para activarlo (y set -o emacs para volver).

    Vi, sería (ESC-K para obtener la línea de primero de curso) «f5;;B» (sin las comillas).

    Por supuesto, usted tiene que entender lo que está en la línea de salirse con la suya. Básicamente, es

    f5 to find the first occurrence of "5" (in --option5).
    ;  to find the next one (in --option15).
    ;  to find the next one (in --option25).
    B  to back up to the start of the word.

    Vamos a ver si el emacs de los aficionados puede venir para arriba con una solución mejor, a menos de 5 pulsaciones de teclas (aunque no quiero iniciar una guerra religiosa).

    Has pensado acerca de si tal vez a usted le gusta poner esta horriblemente largo de comandos en un script? 🙂

    De hecho, me puede ir mejor que: «3f5B» para encontrar la tercera aparición de «5», a continuación, volver al inicio de la palabra.

    • No hay necesidad de un script, simplemente pulse «v» en la vi y modo de abrir la línea de comandos en un editor. Puede dar formato a la línea de comandos, errar, «script», más bien con el carácter de nueva línea, y no hay tempfile necesario. 🙂 Así que, «v/25» se pone en 4 caracteres.
    • Pero entonces, usted necesita más de la <Enter> clave para ejecutarlo. @dannysauer
  5. 9

    El uso de Meta-b /Meta-f para mover hacia delante o hacia atrás por una palabra respectivamente.

    En OSX, Meta se traduce como ESC, que apesta.

    Pero alternativamente, usted puede abrir la terminal de preferencias -> ajustes -> perfil -> teclado y active la casilla «usar la opción como meta clave»

  6. 8

    Después de ejecutar el comando una vez, ejecutar fc

    Lanzará $EDITOR con el comando anterior, entonces usted puede utilizar su regular editor para modificar el comando. Al guardar y salir, el archivo será ejecutado.

    ..pero, como Pax dijo – la línea de comandos no es particularmente bueno para la edición absurdamente largo de las líneas – ¿por qué no hacer el comando en un script?

  7. 4

    Si quieres avanzar un cierto número de palabras, golpeó M-<n> (M- es para Meta y sus normalmente la tecla escape), a continuación, golpeó a un número. Esto envía una repetición de un argumento a readline, por lo que puede repetir cualquier comando que se quiere – si usted desea ir hacia adelante y golpeó M-<n> M-f y el cursor se moverá hacia adelante <n> número de palabras.

    E. g.

     $|echo "two three four five six seven"
     $ M-4
     (arg: 4) echo "two three four five six seven"
     $ M-f
     $ echo "two three four| five six seven"

    Así por su ejemplo desde el cursor al principio de la línea que le golpeó, M-26 M-f y el cursor sería en --option25| -o – desde el final de la línea M-26 M-b iba a poner el cursor en --|option25

  8. 2

    Incremental de la historia de la búsqueda

    en la terminal escriba:

    gedit  ~/.inputrc

    a continuación, copiar, pegar y guardar

    "\e[A": history-search-backward
    "\e[B": history-search-forward
    "\e[C": forward-char
    "\e[D": backward-char

    todo lo que usted necesita hacer para encontrar un comando anterior es para entrar a decir de los primeros 2 o 3 letras y hacia arriba flecha le llevará rápidamente al decir que quiero:

    for f in *.mid ; do timidity "$f"; done

    todo lo que necesitas hacer es entrar

    fo

    y golpear hacia arriba flecha comando pronto aparecerá

  9. 1

    Una opción es utilizar M-x shell en emacs. Que ofrece todas las facilidades de edición y las pulsaciones de teclado que emacs ha, por lo que C-s se puede utilizar para buscar en el texto option25, por ejemplo.

    (Pero me gustaría todavía prefieren estar en el real de la terminal de shell en cambio, si alguien puede me apunto a la buena de búsqueda y edición de instalaciones).

  10. 0

    Utilizar el ratón

    A veces, la forma más sencilla para editar una línea de comandos es el uso de un ratón. Algunas respuestas anteriores dan un comando para abrir su línea actual en su $EDITOR. Para mí (zhs con grml config) que la combinación es Alt+e. Si habilita el ratón en el editor, usted puede hacer uso de ella.

    Para habilitar el ratón en Vim, añade esto a tu ~/.vimrc

    set mouse=a
    set ttymouse=xterm2

    Si desea hacer una selección de texto en la terminal (en lugar de pasar el click con el ratón para vim), mantenga la tecla Mayús y haga clic en; esta es la terminal específico, por supuesto.

    Administradores del sistema, no debe tener miedo del ratón.

  11. 0

    De Cygwin, puede activar esta característica haciendo clic derecho en la ventana. En la ventana emergente, seleccione Opciones… -> Ratón> activar Clics lugar de la línea de comandos cursor -> Aplicar.

    A partir de ahora, simplemente haga clic en el botón izquierdo del ratón en alguna posición dentro de la línea de comandos se coloque el cursor en ella.

  12. 0

    primero:
    export EDITOR=’nano -m’

    a continuación:
    CTRL+X CTRL+E en la secuencia.

    La corriente de línea se abrirá en el editor nano con el ratón habilitar. Usted puede hacer clic en cualquier parte del texto y editar

    a continuación, CTRL+X para salir y y para confirmar el ahorro.

  13. 0

    He hecho un script para hacer la línea de comandos mover el cursor del ratón haga clic en :

    1. Habilitar xterm ratón informes de seguimiento de
    2. Conjunto readline enlaces a consumir la secuencia de escape generados por los clics

    Se puede encontrar en github

    Más info en otro post

    Funcionará si echo -e "\e[?1000;1006;1015h" # Enable tracking de impresión secuencias de escape en la terminal cuando se hace clic con el ratón

Dejar respuesta

Please enter your comment!
Please enter your name here