Vim in OSX: Wie kann ich mit einer im Terminal geöffneten Vim-Datei Bild-auf / Bild-ab / zu EOL wechseln?


28

In Putty, bei dem ich hauptsächlich VIM verwendet habe, konnte ich Folgendes tun:

  • Bild auf / ab: Mit der nativen Bild auf / ab-Taste. Unter Mac ist die Alternative Fn + Auf / Ab, was im Terminal nicht funktioniert (kein Bildlauf in der VIM-Datei, aber Bildlauf im Terminalpuffer).
  • Ebenso bringen mich die Tasten Fn + rechts / links nicht zum Anfang / Ende der Zeile

Wie emuliere ich diese Funktionalität in Mac OS X?


Es könnte hilfreich sein, Ihre Frage zu klären, wenn Sie "Fn + rechts / links" durch "Home / End" ersetzt oder erweitert haben. Genau das tun diese Fn-Kombinationen.
Chris Seite

Antworten:


48

Dies ist keine spezielle Mac-Frage, dies ist wirklich eine vi-Frage.

Im Navigationsmodus scrollen Sie mit Strg-F eine Seite nach unten und mit Strg-B eine Seite nach oben (denken Sie an "F" nach vorn und "B" nach hinten). Strg-d scrollt eine halbe Seite nach unten und Strg-u eine halbe Seite nach oben.

^ bringt Sie an den Anfang einer Zeile und $ an das Ende. Ich weiß, ich weiß, aber dafür gibt es historische Gründe.

Hier ist ein wirklich guter Spickzettel für vi-Steuerelemente. vi ist ein bisschen geheimnisvoll, aber wenn Sie es erst einmal verinnerlicht haben, ist es der schnellste und geschickteste Texteditor der Welt.


1
"Dies ist keine spezielle Mac-Frage, das ist wirklich eine vi-Frage." Es geht hauptsächlich darum, wie die Keymap der Mac OS X Terminal-Anwendung eingerichtet wird, aber es stellt sich heraus, dass der zweite Teil der Frage, Start / Ende der Zeile, bereits eine Zuordnung in Terminal enthält und eine mögliche Lösung darin besteht, die Zuordnung von VI zu bearbeiten es verstehen. Alternativ kann die Tastaturbelegung des Terminals bearbeitet werden.
Chris Seite

16

Die Standardeinstellungen des Terminals ordnen Shift- Page Upund Shift- Page Downden Zeichenfolgen zu, mit denen Programme wie Vim und Emacs angewiesen werden, einen Bildlauf ( ESC [ 5 ~und ESC [ 6 ~) durchzuführen .

Wenn Sie möchten, dass diese Tasten Zeichenfolgen ohne den ShiftModifikator an das Terminal senden , können Sie die Tastaturbelegung anpassen:

Terminal> Einstellungen> Einstellungen> [Profil]> Tastatur

In diesem Fall empfehle ich, die Bedeutung des ShiftModifikators für diese Tasten zu invertieren, indem Sie die Zuordnungen für die verschobenen und nicht verschobenen Tasten vertauschen, damit die alternativen Verhaltensweisen weiterhin verfügbar sind. Weitere Informationen finden Sie im Menü Ansicht , das Bildlaufbefehle enthält, die den CommandModifikator verwenden, damit sie unabhängig von der Tastaturbelegung des Terminals verfügbar sind.

Ebenso werden Shift- Homeund Shift- Endzugeordnet, um zum Anfang / Ende der aktuellen Zeile ( ESC [ Hund ESC [ F) zu gelangen. Diese Sequenzen werden von Bash verstanden, aber Sie müssen möglicherweise Vim anpassen, um sie zu verstehen, oder die Zuordnungen speziell für Vim bearbeiten. Vim, Emacs und einige andere Programme senden eine Escape-Sequenz, um das Terminal in den „Application Cursor Mode“ zu versetzen, in dem die Home / End-Tasten ESC O Hund senden ESC O F, Terminal (ab 10.9) dieses Verhalten jedoch nicht implementiert. Daher möchten Sie möglicherweise die Tastaturbelegung ändern, um stattdessen diese anderen Codes zu senden (Bash versteht sie auch). (Auf anderen Betriebssystemen Homeund Endfür den Anfang / das Ende der Zeile verwendet, stellt Terminal ihnen den ShiftModifikator für die Symmetrie zur Verfügung.)

Control- Left Arrowund Control- Right Arrowsind ebenfalls standardmäßig den Sequenzen "Zum Anfang / Ende der Zeile" zugeordnet, obwohl sie sich von den Sequenzen unterscheiden, die den Sequenzen Shift- Homeund Shift- zugeordnet sind End. Stattdessen werden sie den Emacs- und Bash-kompatiblen Sequenzen ESC [ 5 Dund zugeordnet ESC [ 5 C. Vorausgesetzt, diese werden von Vim nicht verwendet, ist es am einfachsten, Vim so anzupassen, dass sie diese akzeptieren, indem Sie ~ / .vimrc verwenden.

Beachten Sie, dass Terminal in neueren Versionen von macOS standardmäßig keine expliziten Zuordnungen für Homeund Endin den Einstellungen mehr hat . Stattdessen weist es ein dynamisches Verhalten auf, bei dem die Tasten automatisch dem Zeilenanfang / -ende zugeordnet werden, wenn der alternative Bildschirm aktiv ist, z. B. bei Verwendung einer Vollbildanwendung wie emacs, vim, screen oder tmux. Wenn Sie ein zeilenorientiertes Programm wie eine Shell auf dem Hauptbildschirm verwenden, scrollen Sie standardmäßig weiter durch die Terminalansicht. Der ShiftModifikator kehrt das Verhalten um.


@ Markhu Ich habe das im letzten Absatz behandelt.
Chris Seite

Wie teilweise im letzten Absatz behandelt, können die Standardeinstellungen in anderen Versionen von MacOS unterschiedlich sein / fehlen. Für 10.13.6 musste ich \033[5~(und ... 6.) für PageDown / Up hinzufügen.
MarkHu

2

Die einfachste und beste Lösung ist n+ . Dabei nhandelt es sich um die Anzahl der Zeilen, die Sie nach unten verschieben möchten, und die Nach- unten-Taste.

Ich mache regelmäßig nur 12+ und 22+ .


1

Ich war es gewohnt, mit Home / End im Einfügemodus an den Anfang und das Ende von Zeilen zu gelangen (von der Verwendung unter Windows und meiner Meinung nach unter Linux), die von Mac nicht unterstützt werden. Dies ist besonders ärgerlich, da ich vim auf einem Remote-System nicht so einfach verwenden kann. Nach einigen schmerzhaften Versuchen und Irrtümern habe ich einige .vimrcZeilen gefunden, die dasselbe tun, und irgendwann eine andere gefunden, die hier eine ähnliche Lösung gefunden hat:

https://coderwall.com/p/fd_bea

Genießen.

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.