J'utilise zsh et, parce que je suis un utilisateur passionné de Vim, je viens de passer à l'utilisation de l'édition de style Vim sur la ligne de commande. (Cela signifie que si je tape ls foo/bar
et décide que je veux à la cd
place, je peux frapper Esc ^
pour revenir au début et cw cd
passer ls
à cd
.
C'est tout dandy, mais le problème est que je ne peux plus utiliser Ctrl+R
pour faire une recherche d'historique récursive. Existe-t-il une autre façon de le faire, ou puis-je outrepasser d'une manière ou d'une autre le raccourci clavier Vim pour le récupérer?
garyjohn
montre une manière Vim de le faire, etJdeBP
montre comment récupérer le raccourci clavier pour Ctrl + R! Je vais jouer avec les deux méthodes et accepter une réponse plus tard. Je déciderai en fonction de 1) quelle méthode me semble plus facile et 2) qui obtient plus de votes positifs. Merci à vous deux!Réponses:
Bien sûr, vous ne pouvez plus utiliser Ctrl+ R. Si vous consultez le manuel de Z Shell, vous verrez qu'il n'y a qu'une liaison de clé pour le
history-incremental-search-backward
widget dans leemacs
clavier. Il n'y a pas de raccourcis clavier pour cela dans les keymaps vi.Mais comme vous le constaterez également à la lecture du manuel (c'est le chapitre 18.), l'ajout d'une liaison de touches est un exercice assez simple dans l'utilisation de la
bindkey
commande:Vous n'avez même pas besoin d'utiliser la
zle
commande pour mapper le widget sur une fonction shell, car il s'agit d'un widget standard.Si vous consultez la réponse à cette même question qui se trouve sur le wiki Z Shell , vous verrez les commandes pour l'ajouter spécifiquement aux keymaps vi "command" et "insert mode":
Notez également que, comme le souligne garyjohn , dans la table de touches vi "command", le /caractère est lié au
vi-history-search-backward
widget. La différence entre ce widget et lehistory-incremental-search-backward
widget est le comportement du widget qui s'applique une fois que l'on est en mode de recherche d'historique. Voici quelques différences que vous remarquerez:history-incremental-search-backward
bascule entre les images clésmain
etvicmd
lorsque vous invoquez levi-cmd-mode
widget tout en restant en mode de recherche. c'est-à-dire depuis leemacs
mode en appuyant sur la Esctouche ou sur les touches Ctrl+ XCtrl+ pour Vbasculer le mode de recherche entre les touchesemacs
etvicmd
. (L'invocation àhistory-incremental-search-backward
partir duvicmd
clavier est donc gênante, à moins que vous ne liez également quelque chosevi-cmd-mode
dans levicmd
clavier.)vi-history-search-backward
traite levi-cmd-mode
widget commeaccept-line
et mettra fin à la recherche, en rentrant dans le mode de commande à partir duquel vous êtes entré dans la recherche. c'est-à-dire (avec les liaisons par défaut) /entre en mode de recherche à partir du mode de commande et Escrevient au mode de commande.history-incremental-search-backward
,history-incremental-search-backward
lesvi-rev-repeat-search
widgets et sont reconnus. c'est-à-dire (en supposant que vous avez modifié les liaisons comme ci-dessus) Ctrl+ Ret Nrecherchera une ligne correspondante précédente.vi-history-search-backward
, seul levi-rev-repeat-search
widget est reconnu. c'est-à-dire (en supposant que vous avez modifié les liaisons comme ci-dessus) Ctrl+ Rprovoquera un bip et sera ignoré.la source
En mode vi de bash, la saisie
<Esc>/<string><Enter>
recherchera l'historique des commandes<string>
.n
cherchera plus loin dans l'histoire;N
recherchera en avant. zshell peut être le même.la source
Je préfère utiliser:
De cette façon, je peux taper
ESC /text
et voir la ligne de commande. Si je veux aller au match suivant, je tapeESC n
la source