control-left dan control-right tidak berfungsi dalam vim, dalam sesi layar

1

Dalam vim, control-left dan control-right adalah back dan forward kata yang dipisahkan spasi-putih (yaitu sinonim untuk B dan W), sama seperti web textareas dan bash.

Tetapi ketika berjalan screen, tombol-tombol ini berhenti bekerja. Saat ditekan, vim sebagai gantinya beralih ke baris perintah dan masuk 5Catau di 5Dsana.

Berikut ini penyandian yang saya miliki untuk kunci-kunci ini:

$ cat >/dev/null    # pressing control-left, then control-right:
^[[1;5C^[[1;5D

BTW: Saya mencoba memetakan kembali kunci-kunci ini .screenrc, seperti ini:

bindkey ^[[1;5D stuff B
bindkey ^[[1;5C stuff W

Ini berfungsi untuk vim, tetapi sekarang kunci-kunci itu tidak bekerja di bashbaris perintah (sebagai gantinya, hanya keluaran Batau W).

Saya menduga ini adalah suatu termcapmisteri, yang tidak pernah saya mengerti ... terima kasih atas pencerahan apa pun!

13rn
sumber
$ echo $TERMmengubah layar $TERMke screen-256color(jika belum) dapat membantu. Bolehkah saya menyarankan Anda untuk terbiasa bdan w, sebaliknya?
romainl
Terima kasih. Itu tidak, saya mengaturnya dengan term screen-256colordi .screenrc, dan restart; echo $TERMmengkonfirmasi perubahan. Tapi itu tidak menyelesaikan masalah. Saya benar-benar menggunakan b/ wsepanjang waktu - Saya sangat terkejut menemukan diri saya menggunakan ^left/ ^right. Saya menyalahkan web.
13ren
Bad web buruk buruk!
romainl
@romainl :-) itu juga bash commandline - karena saya sering beralih antara bash dan vim, itu mungkin lebih merupakan faktor daripada web. Buruk bash
13ren

Jawaban:

2

Ada beberapa cara untuk memperbaikinya. Pertama adalah mencatat nilai $ TERM sebelum Anda memulai layar (mungkin xterm), kemudian setelah Anda memulai vim di dalam layar, setel opsi 'term' ke nilai itu. Sebagai contoh,

:set term=xterm

Cara lain adalah dengan mendefinisikan pemetaan untuk urutan karakter tersebut:

:map <esc>[1;5D <C-Left>
:map <esc>[1;5C <C-Right>

Anda dapat menjalankan salah satu dari solusi tersebut di ~ / .vimrc Anda secara kondisional menggunakan layar, seperti ini:

if &term == "screen"
    map <esc>[1;5D <C-Left>
    map <esc>[1;5C <C-Right>
endif
garyjohn
sumber
1
Cemerlang! Keduanya bekerja. Saya menemukan ini juga berfungsi jika saya mengaturnya di .screenrc ( term xterm), Tapi saya kira paling tidak mengganggu adalah yang paling bijaksana, jadi saya telah menggunakan jawaban peta bersyarat Anda. BTW pengikatannya ditukar, dengan 5D untuk kiri, 5C untuk kanan (yang sebaliknya akan diharapkan). Jadi saya menggunakan: map <esc>[1;5D <C-Left>danmap <esc>[1;5C <C-Right>
13ren