Mengapa mengekspor vim sebagai EDITOR di zsh menonaktifkan pintasan keyboard?

23

.zshrcPenampilan saya seperti ini:

export EDITOR="/usr/bin/vim"

Sekarang ketika saya membuka terminal dan memasukkan pintasan keyboard seperti ctrlapergi ke awal baris, itu tidak berfungsi. Sebagai gantinya, string ^A(atau string lain, tergantung pada pintasan yang saya masukkan) akan dimasukkan ke terminal:

emlai:~ % ^A

Menghapus kata exportdari saya .zshrcmembuat pintasan keyboard berfungsi dengan baik:

EDITOR="/usr/bin/vim"

Mengekspor EDITORsebagai sesuatu yang lain selain vimmembuat pintasan keyboard juga berfungsi, misalnya:

export EDITOR="/usr/bin/nano"

Mengapa ini terjadi?

Saya mengujinya bashjuga, dan pintasan keyboard berfungsi dengan baik dalam semua kasus di sana.

puncak
sumber

Jawaban:

27

zshseperti kebanyakan shell modern memiliki pilihan antara dua pemetaan keyboard yang berbeda untuk pengeditan baris perintah: visatu dan emacssatu. Dalam beberapa shell (seperti tcshatau readline-berbasis suka bash), yang emacsmerupakan default dan mungkin yang Anda harapkan.

Dengan zsh, Anda mendapatkan emacsmodus secara default kecuali $EDITORatau $VISUALmengandung vi(jika Anda seorang vi/ nvi/ vim/ elvispengguna (meskipun juga vimacsdan jika $EDITORini ...), mengasumsikan Anda lebih memilih mode)./home/victor/bin/emacszshvi

Untuk memaksa mode tertentu terlepas dari nilai $EDITOR, tambahkan:

bindkey -e # for emacs
bindkey -v # for vi

atau padanannya yang lebih portabel:

set -o emacs
set -o vi

untuk Anda ~/.zshrc. Lihat

info -f zsh -n Keymaps

untuk detail.

Stéphane Chazelas
sumber
Menarik. Apakah ada alasan untuk menggunakan bindkeylebih set -o?
puncak
@zenith, mungkin tidak. bindkeyadalah cara tcsh dan cara asli. Saat ini mereka harus setara.
Stéphane Chazelas