Saya menggunakan bindkey -v
(untuk bash-ers set -o vi
saya pikir itu berfungsi dalam mode zsh juga) atau vi (m). tetapi itu menggangguku bahwa saya tidak memiliki isyarat visual untuk memberi tahu saya apakah saya dalam mode insert atau mode perintah. Adakah yang tahu bagaimana saya bisa membuat prompt saya menampilkan mode?
44
CTRL+C
saat dalam mode vi-command, prompt akan mengatur ulang, tetapi tunjukkan Anda dalam mode perintah ketika Anda benar-benar dalam mode insert.zle-line-init
harus selalu mengubah indikator untuk memasukkan mode. Untuk beberapa alasan$KEYMAP
tidak diperbarui dengan benar ketika zle-line-init dipanggil.zle reset-prompt
akan menghapus 1 (atau lebih) baris di atas prompt (jika prompt Anda multiline) saat menggambar ulang :( Ini adalah showstopper untuk saya.Anda sudah menemukan
zle-keymap-select
yang dieksekusi setiap kali mode berubah. Anda dapat menggunakannya untuk mengatur beberapa indikator visual selain permintaan, tergantung pada apa yang didukung terminal Anda (dan selera Anda dalam tampilan indikator mode, tentu saja).Ada kemampuan terminfo standar untuk mengubah bentuk kursor. Namun beberapa terminal menampilkan kursor yang sama di kedua mode. Gagasan Xterm tentang kursor yang kurang terlihat adalah membuatnya berkedip (dan ini harus diaktifkan dengan
-bc
argumen baris perintah ataucursorBlink
sumber daya).Dengan beberapa terminal, Anda juga dapat mengubah warna kursor dengan
print -n '\e]12;pink\a'
(berdasarkan nama warna) atauprint -n '\e]12;#abcdef\a'
(dengan spesifikasi RGB). Urutan ini dijelaskan dalam dokumentasi xterm, dalamctlseqs
file; emulator terminal modern biasanya meniru xterm, meskipun mereka mungkin tidak mendukung semua fitur-fiturnya.sumber
main
-KEYMAP
alihviins
, tidak yakin mengapa.main
adalah alias untukviins
atauemacs
tergantung pada apakah zsh mengira editor favorit Anda vi atau tidak ketika mulai. Saya pikir itu akan digunakanviins
ketika beralih dari mode kembalivicmd
, tetapi tampaknya itu menggunakanmain
sebagai gantinya. Diperbarui.zle-line-init
(atau alternatif apa pun) karenazle-keymap-select
tidak dipanggil jika menekan masuk mengubah keymap.Untuk orang-orang yang memiliki masalah menggunakan reset-prompt dengan prompt multiline, ini bekerja untuk saya: http://zeitlens.com/posts/2014-06-29-howto-zsh-vi-style.html Dalam kombinasi dengan https: // stackoverflow.com/questions/3622943/zsh-vi-mode-status-line Saya akhirnya melakukan:
sumber
Anda dapat mencoba VimMode
sumber
Inilah yang saya gunakan untuk mengubah kursor antara bentuk 'Blok' dan 'Balok' di zsh:
(Diuji dengan Rayap , terminal gnome , dan terminal pasangan )
sumber
add-zsh-hook
seperti: gist.github.com/MatrixManAtYrService/…Solusi lain untuk mengubah bentuk kursor antara balok-I dan balok (untuk garis bawah, gunakan
\033[4 q
). Tambahkan ini ke~/.zshrc
.Dimodifikasi dari https://bbs.archlinux.org/viewtopic.php?id=95078 . Diuji di terminal gnome 3.22.
Memperbarui
Namun solusi lain untuk mengubah bentuk kursor dapat ditemukan di sini . Yang ini tampaknya berfungsi untuk iTerm2, yang saya tidak punya alat untuk menguji, tetapi menambahkannya di sini kalau-kalau itu berguna untuk orang lain. Tambahan terakhir untuk Anda
~/.zshrc
adalahsumber
Saat ini saya menggunakan tema Zsh with Bullet Train . Mengikuti contoh yang diberikan oleh jawaban Sebastian Blask , saya berakhir dengan kode di bawah
Ini hanya akan mengubah de default $ ke huruf N ke mode normal dan I ke mode insert.
Gambar ini adalah contoh ketika dalam mode normal saya menekan Ctrl+ C:
sumber
Ini adalah versi lain, berdasarkan dari pos Sebastian Blask . Ini dimaksudkan agar tidak mengganggu sebanyak mungkin, karena semua solusi lain yang bisa saya temukan menggunakan garis tambahan, status di sebelah kanan, atau karakter tambahan.
Ini hanya mengubah warna
$
dari putih ke merah ketika mode normal diaktifkan. Edit prompt sesuai keinginan Andasumber
Versi untuk
oh-my-zsh
penggunaAda plugin untuk
oh-my-zsh
dipanggilvi-mode
yang dapat ditemukan di sini:robbyrussell / oh-my-zsh / plugins / vi-mode
Saya menggunakan Antigen untuk mengelola plugin saya, jadi termasuk itu semudah menambahkan ini ke
.zshrc
:sumber
The zsh-vim-mode Plugin mampu menunjukkan indikator untuk insert, perintah, pencarian, mengganti, dan mode visual. Ia menggunakan teknik dasar dari jawaban lain untuk menghubungkan ke berbagai kait ZLE (zle-keymap-select, zle-isearch-update, dll.). Ini memeriksa
[[ $ZLE_STATE = *overwrite* ]]
mode ganti. Ia memeriksa$REGION_ACTIVE
untuk mengidentifikasi mode visual.Logikanya diperumit oleh beberapa keanehan tentang bagaimana ZSH memecat peristiwa ketika meninggalkan mode pencarian.
Fitur bagus lainnya dari modul ini adalah kemampuan untuk mengubah bentuk dan warna kursor berdasarkan mode. Misalnya, Anda dapat menggunakan bilah vertikal dalam mode INSERT dan garis bawah yang berkedip dalam mode SEARCH.
sumber