Sé que puedo usar Uppara iterar a través de comandos anteriores. Ejecutar el último comando simplemente implica Up+ Enter. Sin embargo, estaba pensando en comprar el teclado Happy Hacking ya que paso mucho tiempo adentro vim
.
Este teclado no tiene teclas de flecha, y la única forma en que sé cómo obtener este tipo de comportamiento es presionando Ctrl+ Ry comenzando a repetir mi comando anterior.
¿Hay una manera fácil de emular Up+ Enteren un terminal UNIX sin las teclas de flecha?
Respuestas:
Con
csh
o cualquier cáscara de la implementacióncsh
-como sustitución de historia (tcsh
,bash
,zsh
):Entonces Enter.
O alternativamente :
Entonces Enter.
O Ctrl+ P,Enter
Espacio mágico
Asimismo, cabe destacar que
!!
, y!-1
no de auto-expansión para ti, hasta que se ejecute (cuando podría ser demasiado tarde).Si se utiliza
bash
, puede ponerbind Space:magic-space
en~/.bashrc
, a continuación, pulsando Spacedespués de que el comando de auto-expandirlas en línea, lo que le permite inspeccionarlos antes de la ejecución. Esto es particularmente útil para la expansión del historial de un comando ejecutado hace un tiempo, por ejemplo!echo
, extraerá el último comando que comience desde el principioecho
. Con el espacio mágico, puede obtener una vista previa del comando antes de que se ejecute.Eso es el equivalente a hacer
bindkey ' ' magic-space
entcsh
ozsh
.fuente
magic-space
¡Esa es una dulce opción!histverify
opción de hacershopt
que readline realice la expansión del historial pero no ejecute el comando la primera vez que presione la tecla Intro. Lo que le permitirá evaluar el resultado y decidir si eso es lo que desea ejecutar.!!
es usar su expansión en el lugar . Por ejemplosudo !!
.La mayoría de los shells que tienen una función de edición de línea de comandos admiten las combinaciones de teclas de Emacs. (un pequeño subconjunto)
Alternativamente, puede configurar su shell para usar el modo de edición de comandos vi, agregando
set -o vi
a su archivo de inicio de shell (por ejemplo,~/.bashrc
). Entonces, por ejemplo, puedes!!
). La tecla menos -también funciona como un comando "subir".!-12
).vi
el modo de comandos, por lo que tendrá que utilizar unvi
comando de edición (por ejemplo, I, A, C, R, o una de las minúsculas) para agregar realmente a la orden de la historia.Entonces, por ejemplo, EsckisudoSpaceEnteres equivalente a
sudo !!
.!-2:- !$
. (Desafortunadamente, no parece admitir buffers con nombre).fuente
vi
truco fue genial!delete
Ctl + u en ZshMi favorito es CTRL+ Pluego CTRL+O
Esto funciona de forma predeterminada, no se necesita configuración adicional. ^ P le permitirá cambiar al último comando y ^ O le permitirá ejecutar la línea actual
Tenga en cuenta que CTRL+ Ose puede usar tantas veces como desee
fuente
^J
ls
opwd
anteriormente.¡Seguro! Como estás acostumbrado a las
vi
combinaciones de teclas, ¿por qué no configuras tu shell para responder a ellas? Parabash
, poner esto en su~/.inputrc
:Ejecutar instancias de bash no volverá a leer el archivo, así que cierre la sesión y vuelva a iniciarla.
zsh
incluso detectará esto por usted: si ninguno de sus scripts de inicio fuerza el modo de edición de una forma u otra usandobindkey
y si$EDITOR
se detecta que su variable de entorno contienevi
, entonces habilitará automáticamente lasvi
combinaciones de teclas. Si necesita forzarlo, ponga esto en su~/.zshrc
:A partir de entonces, úselo ESCcomo siempre para ingresar a la línea de comando ky jpara moverse hacia arriba y hacia abajo.
TAMBIÉN : Los enlaces de shell predeterminados en la mayoría de los shells son los enlaces de emacs, por lo que en realidad Crtl-Pya Ctrl-Ndeberían funcionar sin que tenga que cambiar nada.
fuente
Con cualquier shell POSIX aplicación de la portabilidad del usuario opción (incluye
ksh
,zsh
,bash
,yash
), también se puede utilizar elfc
comando:Ver un ejemplo:
Más información en Ejecutar una variedad de comandos de la respuesta de la historia de Jonathan Leffler.
fuente
Para todos los usuarios de Mac iterm2:
Puedes unir ⌘+ Ra
0x0C 0x10 0x0d
. Esto borrará la terminal y ejecutará el último comando.fuente
0x10 0x0d
(es decir, omita el0x0C
).Encuentro que necesito rehacer los comandos como superusuario a menudo, así que
rehace el comando anterior como si hubiera recordado escribir
sudo
en primer lugar.fuente
El
ksh
shell tiene un alias predeterminador
que repite el comando más reciente. Está obligado afc -s
:Curiosamente, la
bash
documentación para elfc
incorporado (help fc
y también en el manual en sí) incluso menciona esto, pero no es un alias predeterminado en ese shell:En
bash
, esto también funcionaría incluso si ha desactivado las expansiones de historialset +H
.En el
zsh
caparazón, hay unr
archivo incorporado que está documentado como el mismofc -e -
.La
fc
utilidad es una utilidad estándar POSIX .fuente
Con
csh
o cualquier cáscara de la implementacióncsh
-como sustitución de historia (tcsh
,bash
,zsh
), también se puede utilizar el!<beginning of command>
llamar a la última orden que comienza con<beginning of command>
.por ejemplo si corriste
!ta
ejecutaríatail file.txt
fuente
tl; dr
!!
solo agrega el último comando a su comando actual.<backtick>!!<backtick>
ejecuta el último comando y agrega la salida a su comando actual.En realidad hay 2 variantes:
Déjame mostrarte 2 ejemplos:
Ejemplo 1
Como puede ver arriba, estoy ejecutando un comando y esencialmente solo agrego el último comando.
Otra variante
Ejemplo 2
fuente
vi `!!`
. Muy útilCuando estoy usando un buen emulador xterm, por ejemplo, masilla, mi forma favorita de proceder es seleccionar el comando, incluido el avance de línea, copiarlo al portapapeles y luego usar el botón derecho del mouse para pegarlo. Esto repite el comando con un solo clic. Esto también funciona bien para una secuencia de comandos separados por punto y coma.
fuente
puedes usar
!n
para ejecutar el enésimo comando en la terminal. donde 'n' es la línea no dehistory
comando.fuente
!?
hasta el último comando? ¿Estás seguro de que no lo estás mezclando!!
(que ya se ha cubierto en otras respuestas)?Escriba Historial y anote el número delante del comando que debe ejecutar y usar
!number
También puede usar ! -1 (1 es el último comando que ejecuta, reemplácelo con el número de conteo que obtiene cuando lo hace desde abajo manteniendo el último ejecutado como 1)
fuente
Hay varias capas en las que puede solicitar el último comando.
Editor de línea
El editor de línea (donde escribe sus comandos) lo proporciona directamente ksh, la biblioteca readline en bash y la biblioteca zle en zsh. Otros shells, como el guión, pueden no tener una biblioteca de edición para comprender estas claves (a menos que estén compiladas con la
--with-libedit
opción habilitada).Este trabajo en ksh, bash, zsh:
Ctrl- PModo # Emacs (anterior)
Ctrl- NModo # Emacs (siguiente)
ESC- k Modo # vi ESC para ir al modo de comando yk para arriba
ESC- j # modo vi ESC para ir al modo de comando y j para abajo
historia
El sistema de historial proporcionado por muchos shells permite la expansión de algunos atajos:
comandos
Hay algunos comandos que pueden recuperar comandos del historial.
Al igual que el comando bastante detallado (solo para imprimir):
o el comando anterior y, por lo tanto, generalmente más portátil
fc
(se vuelve a ejecutar directamente):O tal vez el más simple
fc -s -1
, pero zsh no acepta esa opción para fc.Si sólo desea imprimir el comando, utilice:
fc -nl -1 -1
.Para editar colocar
FCEDIT
a un editor de texto (por ejemplo, ed, emacs, vi, etc.) y usar fc directamente:fc -1
.fuente