Estoy usando zsh y, como soy un ávido usuario de Vim, simplemente cambié a usar la edición de estilo Vim en la línea de comandos. (Eso significa que si escribo ls foo/bar
y decido que quiero cd
hacerlo, puedo presionar Esc ^
para volver al principio y cw cd
cambiar ls
a cd
.
Eso es todo excelente, pero el problema es que ya no puedo usar Ctrl+R
para hacer búsquedas recursivas en el historial. ¿Hay otra forma de hacerlo, o puedo anular de alguna manera la combinación de teclas Vim para recuperarlo?
garyjohn
muestra una forma de Vim de hacerlo yJdeBP
muestra cómo recuperar la combinación de teclas para Ctrl + R. Voy a jugar con ambos métodos y aceptaré una respuesta más tarde. Decidiré en base a 1) qué método me parece más fácil y 2) cuál recibe más votos a favor. ¡Gracias a los dos!Respuestas:
Por supuesto, ya no puedes usar Ctrl+ R. Si consulta el manual de Z Shell, verá que solo hay un enlace de teclas para el
history-incremental-search-backward
widget en elemacs
mapa de teclas . No hay enlaces de teclas para ello en los mapas de teclas vi.Pero como también encontrará al leer el manual (Es el capítulo 18.), agregar una combinación de teclas es un ejercicio bastante simple en el uso del
bindkey
comando:Ni siquiera tiene que usar el
zle
comando para asignar el widget a una función de shell, ya que este es un widget estándar.Si consulta la respuesta a esta misma pregunta que está en el wiki de Z Shell , verá los comandos para agregar específicamente esto a los mapas de teclas vi "comando" y "modo de inserción":
También tenga en cuenta que, como señala garyjohn , en el mapa de teclas vi "comando", el /carácter está vinculado al
vi-history-search-backward
widget. La diferencia entre este widget y elhistory-incremental-search-backward
widget es el comportamiento del widget que se aplica una vez que uno está en modo de búsqueda de historial. Estas son algunas de las diferencias que notará:history-incremental-search-backward
alterna entre los mapas de teclasmain
yvicmd
cuando invoca elvi-cmd-mode
widget mientras permanece en modo de búsqueda. es decir, desde elemacs
modo presionando la Esctecla o las teclas Ctrl+ XCtrl+ Valterna el modo de búsqueda entre los mapas de teclasemacs
yvicmd
. (Invocarhistory-incremental-search-backward
desde elvicmd
mapa de teclas es, por lo tanto, problemático, a menos que también enlace algovi-cmd-mode
en elvicmd
mapa de teclas).vi-history-search-backward
trata elvi-cmd-mode
widget comoaccept-line
y finalizará la búsqueda, volviendo a ingresar el modo de comando desde el que ingresó la búsqueda. es decir (con los enlaces predeterminados) /ingresa al modo de búsqueda desde el modo de comando y Escvuelve al modo de comando.history-incremental-search-backward
, tanto elhistory-incremental-search-backward
y losvi-rev-repeat-search
widgets son reconocidos. es decir (suponiendo que ha alterado los enlaces como se indicó anteriormente) ambos Ctrl+ Ry Nbuscará una línea coincidente anterior.vi-history-search-backward
, solovi-rev-repeat-search
se reconoce el widget. es decir (suponiendo que ha alterado los enlaces como se indicó anteriormente) Ctrl+ Rprovocará un pitido y será ignorado.fuente
En el modo vi de bash, al escribir
<Esc>/<string><Enter>
buscará en el historial de comandos<string>
.n
buscará más atrás en la historia;N
buscará hacia adelante zshell puede ser lo mismo.fuente
Prefiero usar:
De esta manera puedo escribir
ESC /text
y ver la línea de comando. Si quiero ir al próximo partido escriboESC n
fuente