Podemos usar las flechas hacia arriba y hacia abajo para navegar en el historial de comandos.
En algunos IDEs, como Matlab, si ingresamos algo y luego presionamos las teclas de flecha, nos desplazamos solo entre los comandos del historial que comienzan con lo que ingresamos. Eso es realmente conveniente, pero en una terminal de shell, esto no funciona.
¿Hay alguna forma de obtener una función similar en un terminal de shell? ¿Y algún otro consejo para mejorar la eficiencia en el uso de terminales?
bash
shell
command-history
Sotavento
fuente
fuente
fish
;)\e[5~
y\e[6~
, uso\e[A
,\e[B
.Respuestas:
Lo que estás buscando es CtrlR.
Escriba CtrlRy luego escriba parte del comando que desee. Bash mostrará el primer comando coincidente. Siga escribiendo CtrlRy bash pasará por los comandos de coincidencia anteriores.
Para buscar hacia atrás en el historial, escriba en su CtrlSlugar. (Si CtrlSno funciona de esa manera para usted, eso probablemente significa que necesita deshabilitar el control de flujo XON / XOFF: para hacerlo, ejecute
stty -ixon
).Esto se documenta en "Búsqueda" en
man bash
.fuente
Ctrl-Q
para salir del estado congelado, si ya golpeóCtrl-S
sin apagar primero el control de flujo y congeló su terminal.Coloque estos en su
~/.inputrc
:Estos hacen Page Upy se Page Downcomportan como lo desee. (Algunas distribuciones ya lo tienen configurado para usted.) Personalmente, considero que estas formas son más convenientes que Ctrl+ Ro
history
.fuente
~/.inputrc
o/etc/inputrc
o el archivo al que hace referencia la variable de entorno$INPUTRC
es el archivo de configuración de edición de línea de todas las aplicaciones que utilizan readline, incluido bash (su shell). Tiene ciertas capacidades de edición de línea incorporadas, incluidas estas dos: en la página del manual de bash, busque una de estas palabras clave para obtener más información.\e[5~
/\e[6~
son las secuencias de escape generadas por las teclas Page Up / Down en la mayoría de los emuladores de terminal; para verlo, inicie elcat
comando y luego presione estas teclas (el byte de escape se representa en la terminal como^[
, en la entrada como\e
).echo $INPUTRC
está vacío. Estoy usando Ubuntu 14.04"\e[A": history-search-backward
y"\e[B": history-search-forward
Además del historial de ^ r / ^ s i-search:
alt.inserta la última "palabra" del comando anterior en el cursor. Repítalo para obtener la última palabra de comandos más antiguos. (Pero tenga en cuenta que un final
&
cuenta como la última palabra para los comandos de fondo).Esto es súper útil para
mkdir foo
,cd
alt-punto. Incluso más rápido que de flecha hacia arriba, ^ a, alt-d (borrar la palabra hacia delante),cd
.Para obtener la penúltima palabra, use
esc
-
2
alt+.
(es decir, use un argumento numérico de estilo emacs paraalt+.
. El conteo negativo desde el final, el conteo positivo desde el comienzo). Pero esto suele ser más problemático de lo que vale; en algún momento es más rápido alcanzar el mouse y copiar / pegar, o con la flecha hacia arriba y ^ w / ^ y parte de él (ver más abajo).Si su terminal está configurada bien / correctamente, ctrl-left y ctrl-right irán hacia atrás / adelante por palabras. Si no, con suerte al menos alt-b y alt-f harán lo mismo.
ctrl- / es un deshacer. Puede usar la repetición automática para eliminar palabras de manera mucho más eficiente si puede deshacer cuando se sobrepasa un poco.
La combinación / combinación más potente de comandos proviene del uso del anillo de eliminación, que funciona igual que en Emacs. ctrl-y para pegar el último ctrl-w / ctrl-u / ctrl-backspace / alt-d. alt-y para recorrer el texto eliminado anterior.
Múltiples ctrl-w o lo que sea en una fila hacen en la entrada kill-ring Use la flecha izquierda y derecha o algo para dividir la entrada si desea eliminar dos cosas y solo pegar una más tarde.
Combinando todo esto juntos, puedes
alt+r
para restaurarlo a como estaba antes de eliminar parte de él.>
para ir al final de la historia (es decir, con la flecha hacia abajo hasta el final), para volver al comando en el que estaba.Otros consejos de uso interactivo:
Habilite
shopt -s globstar
, para que pueda hacerlo**/*.c
(recursivo, incluido el directorio actual). A veces útil para uso interactivo, pero generalmentefind -name '*.c' -exec foo {} +
es mejor.Si escribe scripts de bash, también le resultará útil
shopt -s extglob
habilitarlos en sus shells interactivos. A veces encontrarás un uso para cosas como*.!(c|h)
hacer coincidir archivos que no terminan con .c o .h.Encuentra los alias en el que quieres
ls -l
,less
y cualquier otra cosa que hacer mucho. (cp -i
,mv -i
yrm -I
son agradables. No tengas el hábito de depender de ellos para hacer un rm selectivo. GNU rm's -I pregunta una vez por todos los argumentos).Me gusta
alias m=less
(m para "más"). Heless
configurado ,y .vinculado al archivo anterior / siguiente (lesskey
). El valor predeterminado es una secuencia de pulsación de teclas múltiples que no se puede usar con autorepeat.Me gusta hacer todo dentro de la pantalla GNU. Me resulta más fácil hacer un seguimiento de las ventanas de pantalla numeradas que un montón de pestañas en Konsole (o cualquier otro emulador de terminal que haya probado). Si aún no lo sabe
screen
, aprenda tmux porque es más nuevo y menos rudo.Para obtener algo como la funcionalidad de abrir un nuevo shell con el mismo cwd que otro shell, utilizo un enlace personalizado para cd / pushd / popd que me permite hacer
cds 8
cd a cualquier directorio que esté usando mi shell en la ventana de pantalla 8. Esto funciona incluso para shells fuera de la sesión de pantalla, siempre que solo haya una sesión de pantalla.fuente
gnome-terminal
en Ubuntu 14.04, antes de cambiar a KDE. La opción relevante está en la configuración de su terminal, prefijo esc vs bit alto, y tal vez algunas otras configuraciones. Algunos de ellos no funcionan perfectamente para mí a través de ssh. (p. ej., presione Ctrl izquierda / derecha con el código de escape de la tecla de flecha, y5D
aparece literalmente)Agregue las siguientes líneas a su
~/.inputrc
Esto es similar a la respuesta de egmont, pero en lugar de usar Page Up y Page Down, usa las secuencias de escape para Arrow Up y Arrow Down. De esta manera es mucho más conveniente usarlo en una Mac.
fuente
Siempre tiendo a configurar mis máquinas con un valor HISTSIZE grande para que mantenga una lista de historial más larga, así como HISTTIMEFORMAT con el valor de marca de tiempo para que pueda ver cuándo se ejecutó el comando.
fuente
El medio que suelo usar es combinar el
history
comando congrep
ES DECIR:
Eso mostrará un historial numerado de los comandos que ha escrito que contienen ese comando, luego puede usar:
rehacer ese comando.
ES DECIR:
history | grep history
seguido por:
!571
repetirá
history | grep history
fuente
!
sustitución del historial es menos segura.Usé diariamente 4 consejos (y algunos otros) en mi terminal de bash:
Ejecute el último comando:
!!
Ejecute el comando N del historial:
!N
Imprima el último comando que comienza con el prefijo del historial:
!prefix:p
Ejecute el último comando comenzando con el prefijo del historial:
!prefix
fuente
Si está bien que lo use en
zsh
lugar debash
usarlo, puede usar oh-my-zsh para eso.Contiene la flecha hacia arriba y hacia abajo por el historial de comandos. También permite esa misma navegación cuando ya ha escrito texto (como Mathlab).
editar: también contiene otras cosas centradas en el desarrollador, como alias y temas. Que los extras hacen que la distribución sea más grande y más compleja de usar.
https://github.com/robbyrussell/oh-my-zsh
fuente
oh-my-zsh
contiene toneladas de cosas También podría decir: esta característica exacta se incluye en esa distribución, cuando todo lo que necesita es una configuración o aplicación específica.Agregue el siguiente alias a ~ / .bashrc
Uso:
h fire
me dará una lista de comandos que contienen fuego . oh ^fire
me dará una lista de comandos que comiencen con fuego .Esto es útil cuando quiero ver una serie de comandos al mismo tiempo.
Por cierto,
'"'"'
es feo, pero no pude encontrar otras formas de evitar comillas simples en comillas simples.fuente
h="history | awk '{\$1=\"\"; print}'
debería funcionar. alternativamente, cree una función y llame a eso.