6 votes

Recherche de la ligne courante dans ZSH (mode vi)

Comment rechercher/naviguer dans la ligne en cours dans zsh ? Par exemple, si le curseur est à la fin de la ligne

// [] indicates cursor position
user@hostname: vim /etx/apache2/sites-enabled/defaul[t]

En mode vi normal, j'aimerais utiliser la recherche rétrospective ( ? ), type etx et faire bouger le curseur comme ceci :

// [] indicates cursor position
user@hostname: vim /[e]tx/apache2/sites-enabled/default

Cependant, / y ? sont liées à la recherche dans l'historique, et non à la recherche en ligne. Je sais que je peux simplement taper 9b et y arriver, mais je trouve que chercher et se déplacer vers la correspondance est plus facile que de compter le nombre de mots à sauter.

Je ne sais pas si c'était clair du tout, faites-moi savoir si je dois clarifier les choses.

3voto

Kent Points 71470

J'espère vous avoir bien compris. Vous voulez dans la ligne de commande zsh, déplacer votre curseur plus rapidement lorsque vous tapez des commandes.

par exemple

user@hostname: vim /etx/apache2/sites-enabled/defaul[t]

Vous voulez passer au premier e

Je n'utilise pas de vi-binding, mais f y F sont vos amis.

Dans cet exemple, vous pourriez 5Fe reculer jusqu'au 5ème e . Si vous ne voulez pas compter, vous pouvez Fe puis appuyez sur ; jusqu'à ce qu'il se mette dans la bonne position.

Consultez l'aide de vim pour plus de détails :

:h f
:h F

Un autre moyen plus rapide serait 0fe pour cet exemple. Déplacer le curseur au début, puis sur e

Si j'ai mal compris votre question, veuillez laisser un commentaire, je supprimerais la réponse.

2voto

gregory Points 56

Peut-être que le fichier ~/.inputrc a affecté ces touches à quelque chose d'étrange ? Ou vous ne comprenez pas bien le fonctionnement de l'historique de recherche.

Recommençons à zéro : Remappez ces touches avec bindkey :

bindkey -M vicmd "?" history-incremental-search-backward
bindkey -M vicmd "/" history-incremental-search-forward

Maintenant, lorsque vous appuyez sur 'esc' (pour vi mode normal) et '?', vous obtiendrez une commande bck-i-search :

%user@hostname: vim /etx/apache2/sites-enabled/defaul[t]
bck-i-search:

À ce stade, vous tapez ce que vous voulez rechercher, par exemple "etx". Et le curseur se déplace à cet endroit de la ligne. Remarque : si le système ne trouve pas ce motif dans la ligne actuelle, il continue à chercher dans votre historique. Ce comportement est considéré comme une fonctionnalité !

Vous remarquerez peut-être que vous ne pouvez pas effectuer de recherche répétée (comme en appuyant sur 'N' dans vim). Dans ce cas, ajoutez quelques liaisons isearch :

bindkey -M isearch '^N' history-incremental-search-backward
bindkey -M isearch '^R' history-incremental-search-forward

Maintenant, en appuyant sur Ctrl-N, vous répétez votre recherche, tandis qu'en appuyant sur Ctrl-S, vous inversez le sens de la recherche répétée (remarque : l'ordre par défaut de cette combinaison de touches est inversé de l'avant vers l'arrière, puisque l'on cherche plus souvent de la fin de l'historique vers l'arrière).

En bref : considérez la ligne actuelle comme le 'haut' de votre historique. L'utilisation du vicmd '/' ou '?' permet de rechercher la totalité de cet historique. Le '?' recherche de haut en bas, tandis que '/' recherche de l'endroit où se trouve le curseur dans votre historique vers le 'haut'. Une autre façon de voir les choses est d'imaginer que votre historique est un grand fichier, et que la ligne sur laquelle vous vous trouvez se trouve au bas de ce fichier. Si cela vous aide à comprendre, vous pouvez penser que '?' est plus pertinent que '/'.

1voto

soheilpro Points 406

Ce script ajoute cette fonctionnalité à zsh : https://github.com/soheilpro/zsh-vi-search

0voto

SenG Points 84

Tapez v lorsque vous êtes en mode commande de votre shell, vous serez amené au véritable éditeur ViM lui-même. En sauvegardant et en quittant, il sera automatiquement exécuté.

0voto

csabahenk Points 141

J'ai eu le même problème. Je n'ai pas réussi à le résoudre en tant que tel, mais j'ai trouvé une solution adéquate : j'ai ajouté une liaison pour la fonction edit-command-line qui m'amène à $EDITOR avec la ligne courante dans le tampon. Là, il est facile de naviguer vers le motif donné.

Voir /usr/share/zsh/functions/Zle/edit-command-line sur la façon de lier la fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X