Wie ordne ich in vim "Befehl rechts" und "Befehl links" dem Zeilenanfang und dem Zeilenende auf dem Mac zu?

10

Ich versuche, es so zu gestalten, dass es der Standardtextbearbeitung in Mac entspricht. Ich habe es versucht map! <D-Left> 0 und map! <D-Right> $ in ~ / .vimrc, aber natürlich hat es nicht funktioniert. Wie kann ich das machen?

Marty
quelle

Antworten:

9

Soweit ich weiß, ist die Syntax ( <D-...>) des Befehlstastenmodifikators ( ) nur in GUI-Instanzen von Vim unter Mac OS X wirksam.

Die Vim- Instanz muss GUI-basiert sein, da die meisten Terminalemulatoren ( Terminal , iTerm usw.) keine Steuersequenzen für Befehlstastenkombinationen generieren. Eine nur tty-Instanz von Vim kann daher nicht erkennen, dass jemals eine Befehlstastenkombination vorhanden war gedrückt (der Terminalemulator sendet niemals etwas über die tty-Schnittstelle). Tatsächlich bindet das Terminal ⌘ ← und ⌘ → (Befehl-Links und -Rechts) an das Durchlaufen der geöffneten Fenster, sodass diese Tasten beim Tippen im Kontext des Terminals „bereits vergeben“ sind .

MacVim (wenn es im GUI-Modus ausgeführt wird) enthält funktionale Zuordnungen für (neben anderen Tastenanschlägen im Mac-Stil)<D-Left>und<D-Right>(jeweils für<Home>(nahezu identisch mit0) bzw.<End>(identisch mit$)). Eine Einschränkung ist, dass diese Standardzuordnungen in eingerichtet sind$VIM/gvimrc, sodass sie nur von Ihrem~/.gvimrc ordnungsgemäß überschrieben werden können.

Ich denke, es gab andere GUI-basierte Versionen von Vim für Mac OS X, aber MacVim scheint die einzige moderne zu sein.

Grob gesagt, werden die Startdateien in dieser Reihenfolge verarbeitet: $VIM/vimrc, ~/.vimrc, $VIM/gvimrc, ~/.gvimrc. Seit den Karten von MacVim müssen Sie Ihre Zuordnung von (wenn Sie sie tatsächlich überschreiben möchten) in Ihre $VIM/gvimrcKarte einfügen , damit sie das „letzte Wort“ hat.<D-Left><D-Left>~/.gvimrc

Chris Johnsen
quelle
Vielen Dank. Ich habe iTerm 2 ausprobiert, es hat damit funktioniert, aber trotzdem ... was für ein Schmerz ... Willkommen zurück in meinem Leben, Xcode
Marty