Führen Sie einen Befehl im zsh vim-Modus aus


9

In zshin vim modeschreibe ich etwas

foo foo bar bar

Dann drücke ich Esc, um in den normalen Modus zu wechseln und zu tippen :

foo foo bar bar
execute: _

Dann gehe ich davon aus das kann ich, ich möchte zum Suchen und Ersetzen barmitbaz

foo foo bar bar
execute: s/bar/baz/g_

Dann versuche ich die Eingabetaste zu drücken, aber das funktioniert nicht. Ich kann nur von der executeVerwendung von Ctrl+ zurückgehen c.

Wie kann ich den Befehl ausführen?

Ich habe das mit meinem normalen .zshrcund überhaupt keinem versucht .zshrc.

Antworten:


10

Der vicmdModus ist trotz des Namens für die Befehle im Normalmodus von Vi vorgesehen. Die Eingabeaufforderung, die von gestartet wurde, :gilt nicht für die Ex-Modus-Befehle von Vi, sondern für die Ausführung von ZLE -Befehlen (Zsh's Line Editor) :

$ echo foo
execute: e_
edit-command-line          emacs-forward-word         end-of-history             end-of-line-hist           exchange-point-and-mark    execute-named-cmd          expand-history             expand-or-complete-prefix
emacs-backward-word        end-of-buffer-or-history   end-of-line                end-of-list                execute-last-named-cmd     expand-cmd-path            expand-or-complete         expand-word

Das Drücken Enterfunktioniert, wenn ein eindeutiges Präfix eingegeben wurde (dh, Sie geben ein ed, was übereinstimmt edit-command-line, und Enterfunktionieren dann). Sie können drücken Tab, um übereinstimmende Befehle anzuzeigen.


Vielen Dank. Ein Grund für die Verwendung von bashdann anstelle von zsh.
Pfnuesel

@pfnuesel ist es? Unterstützt Bash die Verwendung der Ex-Befehle von Vi?
Muru

1
Wenn vSie tippen , können Sie eingeben vimund alles tun, was Sie tun können vim.
Pfnuesel

3
@pfnuesel Oh, das. Zsh hat das. Es ist standardmäßig nicht aktiviert. Siehe unix.stackexchange.com/a/6622/70524
muru

@muru Deine Antwort ist etwas irreführend. Was Sie als "Vicmd-Modus" bezeichnen, ist in der Tat die commandKeymap - das ist die "Ex-ähnliche", die Sie execute:zur Eingabe von ZLE-Befehlen auffordert. Die vicmdKeymap dient zum Arbeiten im Befehlsmodus im vi (m) -Stil. Wenn Sie zsh im vi-Modus verwenden, werden Sie wahrscheinlich zwischen vicmdund viinsauf die gleiche Weise hin- und herwechseln, wie Sie in vi (m) zwischen Befehls- und Einfügemodus hin und her wechseln.
wjv
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.