Ok, also habe ich endlich die große Veränderung vorgenommen. In meiner .zshenv habe ich meinen EDITOR geändert:
export EDITOR=vim
Es gibt ein paar Fragen, die so geringfügig sind, dass ich keine separaten Fragen für sie starten wollte. Hier sind sie:
Wie kann ich zsh veranlassen, wie in vim zwischen Einfügemodus und Befehlsmodus zu unterscheiden? Dies würde den Cursor vorzugsweise von einer Unterstreichung in einen Block wie in vim ändern, aber das Anzeigen von Text am unteren Rand würde ebenfalls funktionieren.
Wie kann ich dafür sorgen, dass es mehr wie ein Vim wirkt? Zum Beispiel wäre es mir lieber, wenn Sie sich standardmäßig im Befehlsmodus befinden und ihn nicht nach einem Befehl verlassen.
~
Zeichen gestoßen, das eingefügt wurde, als ich dieDelete
Taste drücktezsh
. Ich fragte eine Frage über sie hier: superuser.com/questions/997593/...Antworten:
1. ) (siehe http://zshwiki.org/home/examples/zlewidgets und http://pthree.org/2009/03/28/add-vim-editing-mode-to-your-zsh-prompt/ ) :
Woher:
"RPS" steht für "Right Prompt String" und definiert die Eingabeaufforderung, die auf der rechten Seite des Terminals angezeigt wird. Die Syntax von $ {Variable / Muster / Ersetzung} entspricht der von "Parameter Expansion" (siehe http: // mywiki) .wooledge.org / BashSheet # Parameter_Operations .
'zle -N' bewirkt, dass die benutzerdefinierbaren Widgets 'zle-line-init' und 'zle-keymap-select' (an gleichnamige Shell-Funktionen) gebunden werden, damit sie beim Initialisieren des Zeileneditors aufgerufen werden Die Keymap wurde geändert, siehe: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC125 .
2. ) Ich vermute, dass Sie ein anderes zsh-Widget schreiben müssen, um dies zu tun. Lassen Sie sich vom ersten der beiden Links für das erste Problem inspirieren.
quelle
Die Lösung von akira hat bei der Verwendung von mehrzeiligen Eingabeaufforderungen das folgende Problem: Wenn Sie vom Ins-Modus in den Cmd-Modus wechseln, werden durch das erneute Zeichnen der Eingabeaufforderung nur wenige Zeilen aus der vorherigen Ausgabe gelöscht (und die neue Eingabeaufforderung wird nur wenige Zeilen darüber angezeigt). Wie viele Zeilen vorhanden sind, hängt davon ab, wie viele Zeilen sich in Ihrer Eingabeaufforderung befinden.
Die Art und Weise, damit umzugehen, ist zu benutzen
zle-line-finish
, ohne es zu benutzenzle reset-prompt
. Ein Beispiel:Und dann können Sie es zu Ihrer rechten Eingabeaufforderung hinzufügen, zum Beispiel:
Dies ist direkt aus meinem Blog-Post darüber:
quelle
zle-line-init
Widget herumgespielt. Änderte es, um zu passen, was Pawel zur Verfügung stellte und Bingo!RPROMPT2
sollte auch so eingestellt sein, dass der Status in Fortsetzungszeilen angezeigt wird. Wenn Sie dies verwenden, möchten Sie möglicherweise auchsetopt transient_rprompt
, dass die Modi für zuvor akzeptierte Zeilen nicht angezeigt werden.bindkey -e
) wechsle, wird dies immer noch angezeigt[INS]
.Diese beiden Zeilen stellen sicher, dass es im Befehlsmodus gestartet wird
quelle
Das Folgende wird Sie mit einem geänderten Cursor und einer Eingabeaufforderung einrichten, die anzeigt, in welchem Modus Sie sich befinden. Sie können
DEFAULT_VI_MODE
entweder zuviins
oder wechselnvicmd
. Fügen Sie einfach das Folgende in ein frisches ein.zshrc
, um zu beginnen:Hinweis: Ich habe dies nur in Terminal.app (2.7.3) unter MacOS (10.12.6) mit zsh (5.3.1) getestet. Auch wenn Sie jemals hinzufügen,
edit-command-line
wird der Modus ebenfalls korrekt eingestellt.quelle