Bagaimana cara mengedit baris perintah dalam editor layar penuh di ZSH?

52

Dalam bash, menggunakan mode vi, jika saya menekan Esc,, vbaris perintah saya saat ini dibuka di editor yang ditentukan oleh $EDITORdan saya dapat mengeditnya di layar penuh sebelum 'menyimpan' perintah untuk dikembalikan ke shell dan dieksekusi.

Bagaimana saya bisa mencapai perilaku serupa di zsh? Memukul vdalam mode perintah menghasilkan lonceng dan tidak memiliki efek yang jelas, meskipun EDITORvariabel lingkungan disetel.

Murali Suriar
sumber

Jawaban:

36

Lihat edit-command-linedi zshcontrib.

bindkey -M vicmd v edit-command-line
singkat
sumber
13
(Hanya untuk memperjelas): Untuk mengaktifkan edit-command-line"widget" Anda perlu sesuatu seperti autoload edit-command-line; zle -N edit-command-linedi salah satu file zsh init Anda (lihat bagian Fungsi ZLE dari zshcontribdokumentasi ).
Chris Johnsen
Bagaimana Anda mengaktifkan ini begitu sudah ada? Bindkey dalam jawaban gaya emacs masuk akal bagi saya. Tetapi saya tidak dapat menemukan referensi tentang apa yang bindkey -M vicmd vmengatur.
Mat Schaffer
1
@MatSchaffer Sama seperti Bash: jika Anda berada dalam mode vi, tekan <ESC>untuk masuk ke mode perintah dari mode insert dan kemudian vke mode visual ( Meta-vsama), atau hanya vjika Anda sudah dalam mode perintah. Jika Anda menggunakan mode Emacs, pengikatan yang khas adalah C-x C-e.
ephemient
1
Memetakan kembali kunci v berarti Anda tidak dapat menggunakan mode visual lagi, jadi saya lebih suka memetakan kembali ke bilah spasi (yang tidak melakukan apa pun yang berguna dalam mode normal) denganbindkey -M vicmd ' ' edit-command-line
gib
37

Jika Anda lebih suka ikatan kunci Emacs:

autoload -z edit-command-line
zle -N edit-command-line
bindkey "^X^E" edit-command-line
Daniel Serodio
sumber
9
The ^x^emengikat tampaknya menjadi default dengan arus oh-my-zsh , yang sangat bagus.
quodlibetor
^ x ^ e persis seperti yang saya cari.
jmreicha
1
Pengaturan serupa untuk Prezto selama editormodul dimuat.
AL the X
23

Anda dapat menggunakan fcuntuk mengedit perintah terakhir dalam sejarah. Ini tidak sama dengan mengedit perintah yang sama, tetapi klik cepat pada tombol Enter menjadikan perintah Anda saat ini sebagai perintah terakhir dalam sejarah.

Christoph Wurm
sumber
15

Ini adalah konfigurasi lengkap yang saya tambahkan ke saya ~/.zshrcuntuk mendapatkan perilaku yang sama dari bash:

export VISUAL=vim
autoload edit-command-line; zle -N edit-command-line
bindkey -M vicmd v edit-command-line
Matt Hughes
sumber
Per komentar sebelumnya, ini dikonfigurasi secara default jika Anda menggunakan Oh my ZSH atau Prezto . Yang terakhir membutuhkan editormodul untuk dimuat dan viatau vimdipilih untuk mode perintah.
AL the X
Saya akan memilih untuk menjadikan ini jawaban yang diterima, itu memecahkan pertanyaan saya dengan semua konfigurasi yang dijelaskan. Terima kasih.
Laurent