ดำเนินการคำสั่งในโหมด zsh vim


10

ในzshในvim modeผมเขียนบางสิ่งบางอย่าง

foo foo bar bar

จากนั้นฉันก็กดEscเพื่อไปในโหมดปกติและพิมพ์ :

foo foo bar bar
execute: _

จากนั้นฉันคิดว่าฉันสามารถทำได้ฉันต้องการค้นหาและแทนที่barด้วยbaz

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

จากนั้นฉันพยายามกด Enter แต่ก็ไม่ได้ผล ฉันสามารถย้อนกลับจากการexecuteใช้Ctrl+ cเท่านั้น

ฉันจะรันคำสั่งได้อย่างไร

ฉันลองสิ่งนี้ด้วยวิธีปกติ.zshrcและไม่ทำอะไร.zshrcเลย

คำตอบ:


10

vicmdโหมดแม้จะมีชื่อที่เป็นคำสั่งโหมดปกติของ Vi พรอมต์ที่เริ่มต้นด้วย:ไม่ใช่สำหรับคำสั่งโหมดอดีตของ Vi แต่สำหรับการรันคำสั่งZLE (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

การกดEnterจะใช้งานได้เมื่อป้อนคำนำหน้าที่ไม่ซ้ำกัน (กล่าวคือคุณพิมพ์edซึ่งจับคู่edit-command-lineแล้วEnterจะใช้งานได้) คุณสามารถกดTabเพื่อดูคำสั่งที่ตรงกัน


ขอบคุณ เหตุผลสำหรับการใช้แล้วแทนbash zsh
pfnuesel

@pfnuesel มันคืออะไร? Bash รองรับการใช้คำสั่ง ex ของ Vi หรือไม่?
muru

1
พิมพ์ดีดvคุณสามารถป้อนและทำสิ่งที่คุณสามารถทำได้ในvim vim
pfnuesel

3
@pfnuesel โอ้นั่น Zsh มีสิ่งนั้น มันไม่ได้เปิดใช้งานโดยค่าเริ่มต้น ดูunix.stackexchange.com/a/6622/70524
muru

@muru คำตอบของคุณเป็นเรื่องเข้าใจผิดเล็กน้อย สิ่งที่คุณกำลังอ้างถึงว่าเป็น "โหมด vicmd" อันที่จริงแล้วเป็นรูปแบบcommandแป้น - นั่นคือ "อดีตเหมือน" ที่ให้คุณexecute:พร้อมรับคำสำหรับการป้อนคำสั่ง ZLE vicmdkeymap เป็นสำหรับการทำงาน vi (M) โหมดคำสั่งสไตล์ เมื่อใช้ zsh ในโหมด vi คุณอาจจะสลับไปมาระหว่างvicmdและviinsในแบบเดียวกับที่คุณเลื่อนไปมาระหว่างคำสั่งและโหมดแทรกใน vi (m)
wjv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.