web-dev-qa-db-fra.com

Vim sous OSX: comment faire page-haut / page-bas / aller à EOL via un fichier vim ouvert dans le terminal?

Dans PuTTY, qui est la façon dont j'ai principalement utilisé VIM, je pouvais faire ce qui suit:

  • Page précédente/suivante: Utilisation de la touche native Page suivante/précédente. Sur 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 la mémoire tampon du terminal).
  • De même, les touches Fn + droite/gauche ne me conduisent pas au début/à la fin de la ligne

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

27
TCSGrad

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

En mode de navigation, ctrl-f fait défiler une page vers le bas et ctrl-b fait défiler une page vers le haut (pensez "F" ou "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 un très bon aide-mémoire sur les contrôles vi. vi est un peu mystérieux, mais une fois que vous l'intériorisez, c'est l'éditeur de texte le plus rapide et le plus simple du monde.

46
Dan Ray

Carte des préférences par défaut du terminal Shift-Page Up et Shift-Page Down aux séquences de caractères qui indiquent à des programmes tels que Vim et Emacs de faire défiler (ESC [ 5 ~ et ESC [ 6 ~).

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

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

Si vous faites cela, je vous recommande d’inverser le sens de la Shift modificateur pour ces clés en échangeant les mappages des touches décalées et non décalées, de sorte que les comportements alternatifs restent disponibles. Voir aussi le menu Affichage, qui contient des commandes de défilement utilisant le Command modificateur afin qu'ils soient disponibles quelle que soit la carte du clavier du terminal.

De même, Shift-Home et Shift-End sont mappés pour se déplacer au début/à la fin de la ligne actuelle (ESC [ H et ESC [ F). Bash comprend ces séquences, mais vous devrez peut-être personnaliser Vim pour les comprendre, ou éditer les mappages spécifiquement pour Vim. Vim, Emacs et certains autres programmes envoient une séquence d'échappement pour placer le terminal en "mode curseur d'application", où les touches Home/End envoient ESC O H et 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 OS, Home et End sont utilisés pour le début/la fin de la ligne, donc Terminal leur fournit le Shift modificateur de symétrie.)

Control-Left Arrow et Control-Right Arrow sont également associés à des séquences "déplacer au début/à la fin de la ligne" par défaut, bien qu'elles soient différentes de celles associées à Shift-Home et Shift-End. Au lieu de cela, ils sont mappés aux séquences compatibles ESC [ 5 D et ESC [ 5 C, compatibles avec Emacs et Bash. 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 Home et End dans les préférences par défaut. Au lieu de cela, il a un comportement dynamique où les touches correspondent automatiquement au début/à la fin de la ligne lorsque l’écran de remplacement est actif, par exemple lorsqu’une application plein écran telle que emacs, vim, screen ou tmux. Lorsqu'ils utilisent un programme orienté ligne tel qu'un shell sur l'écran principal, ils continuent à faire défiler la vue du terminal par défaut. le Shift Le modificateur inverse le comportement.

14
Chris Page

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

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

2
T.Woody

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

https://coderwall.com/p/fd_bea

Prendre plaisir.

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