Vim dans OSX: Comment faire page-up / page-down / aller à EOL via un fichier vim ouvert dans le terminal?

28

Dans le mastic, c'est ainsi que j'ai principalement utilisé VIM, je pouvais faire ce qui suit:

  • Page up / down: Utilisation de la touche native Page up / down. Sous Mac, l'alternative est Fn + Up / Down, qui ne fonctionne pas dans le terminal (ne fait pas défiler le fichier vim, mais fait défiler le tampon du terminal)
  • De même, les touches Fn + droite / gauche ne me prennent pas en début / fin de ligne

Comment puis-je émuler cette fonctionnalité dans Mac OS X?

TCSGrad
la source
Cela pourrait aider à clarifier votre question si vous avez remplacé ou augmenté "Fn + droite / gauche" par "Début / Fin", ce que font ces combinaisons Fn.
Chris Page

Réponses:

48

Ce n'est pas spécifiquement une question mac, c'est vraiment une question vi.

En mode navigation, ctrl-f fait défiler une page vers le bas et ctrl-b fait défiler vers le haut une page (pensez "F" vers l'avant et "B" ack). Ctrl-d fait défiler une demi-page vers le bas et ctrl-u fait défiler une demi-page vers le haut.

^ vous amène au début d'une ligne et $ à la fin. Je sais, je sais, mais il y a des raisons historiques à cela.

Voici une très bonne feuille de triche sur les contrôles vi. vi est un peu mystérieux, mais une fois que vous l'internalisez, c'est l'éditeur de texte le plus rapide et le plus fluide du monde.

Dan Ray
la source
1
"Ce n'est pas spécifiquement une question mac, c'est vraiment une question vi." Il s'agit principalement de la façon de configurer le clavier de l'application Mac OS X Terminal, mais il s'avère que la deuxième partie de la question, sur le début / fin de ligne, a déjà un mappage dans Terminal et une solution possible consiste à modifier la carte de vi en le comprendre. Alternativement, la carte du clavier du terminal peut être modifiée.
Chris Page
16

Les préférences par défaut de Terminal sont mappées Shift- Page Upet Shift- Page Downaux séquences de caractères qui indiquent aux programmes comme Vim et Emacs de défiler ( ESC [ 5 ~et ESC [ 6 ~).

Si vous souhaitez que ces touches envoient des séquences de caractères au terminal sans le Shiftmodificateur, vous pouvez personnaliser la carte du clavier:

Terminal> Préférences> Paramètres> [profil]> Clavier

Si vous faites cela, je vous recommande d'inverser la signification du Shiftmodificateur pour ces touches en échangeant les mappages pour les touches décalées et non décalées, afin que les comportements alternatifs soient toujours disponibles. Consultez également le menu Affichage , qui contient des commandes de défilement qui utilisent le Commandmodificateur afin qu'elles soient disponibles quelle que soit la carte du clavier du terminal.

De même, Shift- Homeet Shift- Endsont mappés pour se déplacer au début / à la fin de la ligne actuelle ( ESC [ Het ESC [ F). Ces séquences sont comprises par Bash, mais vous devrez peut-être personnaliser Vim pour les comprendre, ou modifier les mappages spécifiquement pour Vim. Vim, Emacs et certains autres programmes envoient une séquence d'échappement pour mettre le terminal en "mode curseur d'application", où les touches Home / End envoient ESC O Het ESC O F, mais Terminal (à partir de 10.9) n'implémente pas ce comportement. Vous pouvez donc modifier la carte du clavier pour envoyer ces autres codes à la place (Bash les comprend également). (Sur d'autres systèmes d'exploitation, Homeet Endsont utilisés pour le début / la fin de la ligne, Terminal leur fournit le Shiftmodificateur de symétrie.)

Control- Left Arrowet Control- Right Arrowsont également mappés par défaut pour "passer au début / fin de ligne", bien qu'ils soient différents de ceux mappés à Shift- Homeet Shift- End. Au lieu de cela, ils sont mappés aux séquences compatibles Emacs et Bash ESC [ 5 Det ESC [ 5 C. En supposant que ceux-ci ne sont pas utilisés par Vim, l'approche la plus simple serait de personnaliser Vim pour les accepter, en utilisant ~ / .vimrc.

Notez que dans les versions plus récentes de macOS, Terminal n'a plus de mappages explicites pour Homeet Enddans les préférences par défaut. Au lieu de cela, il a un comportement dynamique où les touches sont automatiquement mappées au début / fin de ligne lorsque l'écran secondaire est actif, par exemple lors de l'utilisation d'une application plein écran comme emacs, vim, screen ou tmux. Lorsque vous utilisez un programme orienté ligne comme un shell sur l'écran principal, ils continuent de faire défiler la vue du terminal par défaut. Le Shiftmodificateur inverse le comportement.

Chris Page
la source
@MarkHu J'ai couvert cela dans le dernier paragraphe.
Chris Page
Comme indiqué en partie dans le dernier paragraphe, les valeurs par défaut peuvent être différentes / manquantes dans d'autres versions de MacOS. Pour 10.13.6, j'ai dû ajouter \033[5~(et ... 6.) Pour PageDown / Up.
MarkHu
2

La solution la plus simple et la meilleure est n+ , où nest le nombre de lignes que vous souhaitez descendre, et est la touche bas.

Je fais régulièrement juste 12+ et 22+ .

T.Woody
la source
1

J'étais habitué à ce que Home / End m'amène au début et à la fin des lignes en mode Insertion (depuis Windows et je pense que Linux), que Mac ne prend pas en charge. C'est particulièrement ennuyeux car lorsque j'utilise vim sur un système distant, je ne peux pas non plus le faire facilement. Après quelques essais et erreurs douloureux, j'ai trouvé quelques .vimrclignes qui font la même chose, et j'ai finalement trouvé quelqu'un d'autre qui a trouvé une solution similaire ici:

https://coderwall.com/p/fd_bea

Prendre plaisir.

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
user1442960
la source