Saat menjalankan vim di bawah layar GNU, saya menemukan bahwa kombinasi CTRLdengan tanda panah dan Pg * tidak berfungsi seperti yang diharapkan.
Saya menggunakan vim-gnome
paket Ubuntu 10.10 .
Pada mesin yang berbeda, juga menjalankan Ubuntu, ini berhasil tanpa masalah; sayangnya saya tidak memiliki konfigurasi yang tersedia untuk saya sekarang.
Ada pertanyaan terkait di sini: Bagaimana cara memperbaiki Ctrl + panah di Vim?
Namun, solusi yang disarankan di sana adalah untuk memetakan kembali keymbinding vim agar bekerja dengan emulator terminal, dalam hal ini Putty. Saya tidak ingat melakukan hal semacam itu, dan curiga ada opsi konfigurasi layar yang akan menyelesaikan masalah ini.
Ada juga utas di milis gnu-screen yang menunjukkan bahwa menjalankan vim via $ TERM=xterm vim
adalah perbaikan atau penyelesaian yang tepat. Ini berhasil, tapi saya agak khawatir bahwa mungkin ada efek samping. Itu juga tidak terdengar cukup akrab untuk menjadi solusi yang saya atur di komputer lain (jika solusi diperlukan).
sumber
term xterm
ke~/.screenrc
file saya memperbaikinya untuk saya. Terima kasih lagi!Jawaban:
Seperti berintuisi dinyatakan dalam update-nya, menambahkan
term xterm
ke~/.screenrc
file yang tampaknya untuk memperbaiki masalah ini.sumber
screen
tidak hanya menyebarkan$TERM
variabel lingkungan daripada menimpanya"screen"
. Agaknya ada beberapa keadaan di mana itu penting untuk dimiliki$TERM == screen
.TERM=screen
adalah bahwa aplikasi yang berjalan di dalam berkomunikasi di dalam terminal Layar: urutan kontrol yang mereka kirim dan terima adalah orang-orang dari Layar, bukan orang-orang dari layar terminal apa pun itu sendiri sedang ditampilkan. Karena Anda dapat melepaskan sesi Layar dan memasangkannya kembali ke jenis terminal yang berbeda, lapisan tipuan ini diperlukan.xterm
?infocmp screen
daninfocmp xterm
, dan urutan pelarian layar dengan urutan pelarian xterm . Saya tidak memiliki gangguan untuk menawarkan; sebagian besar aplikasi tidak akan keberatan, tetapi beberapa mungkin berperilaku mengganggu.Ada beberapa cara lain untuk mengatur terminal yang berfungsi dalam menjalankan proses:
Dalam instance layar yang sedang berjalan, menekan
^A
-:
dan mengeluarkan perintahterm xterm
akan menyebabkan layar yang baru dibuka di bawah instance itu dimulai dengan$TERM
variabel lingkungan mereka diatur kexterm
; ini pada gilirannya akan menyebar kevim
instance yang dipanggil . Instance vim ini akan menampilkan perilaku yang sesuai dengan CTRL-combo; Saya belum menemukan efek samping dari strategi ini. Perintah ini tidak mempengaruhi layar yang ada. Perintah ini tentu saja dapat digunakan dalam~/.screenrc
file, jadi ada kemungkinan bahwa metode ini digunakan pada komputer lain.Dalam instance vim yang sedang berjalan, perintah
set term=xterm
akan membuat CTRL-combo berfungsi dalam instance vim tersebut. Ini memiliki efek samping dari melepas clipboard X (yaitu@*
dan@+
) karena alasan yang belum saya mengerti. Menariknya, efek samping clipboard juga terjadi ketika perintah:set term=screen
dijalankan dalam contoh vim dimulai dengan$TERM=xterm
.sumber
Masalah mendasarnya adalah pemetaan yang dilakukan
screen
antara terminal aktual (diidentifikasi olehTERM
variabel lingkungan di luarscreen
) dan emulasi di dalamnyascreen
tidak lengkap.Jika Anda mengujinya (menggunakan vttest atau tack ), Anda mungkin melihat adanya kekurangan
Mencoba untuk memperbaiki masalah ini dengan menetapkan
term
dalam.screenrc
memiliki kelemahan bahwa ia bekerja hanya untuk diberikan aktual-terminal, dan tidak portabel untuk implementasi terminal lainnya. The dokumentasi catatanAda solusi lain (dengan kelemahan berbeda), menggunakan fitur ini dari
screen
dokumentasi :ncurses menyediakan beberapa deskripsi terminal alternatif yang berguna untuk kasus ini, misalnya screen.xterm-new , untuk memperbaiki masalah dalam pemetaan layar. Dalam praktiknya, saya menggunakan
TERM=xterm-new
, dan saat menjalankan layar, dapatkan pemetaan tombol fungsi yang dapat digunakan.Merujuk kembali ke
term
pengaturan layar , dalam pengujian Anda mungkin memperhatikan bahwa masih ada masalah dengan pemetaan, yang dibahas dalam alternatif ini. Jika mungkin untuk mendapatkan deskripsi terminal yang akurat menggunakanterm
, alternatif ini akan menjadi alias sederhanascreen
. Mereka tidak.ncurses tidak menyediakan
screen.xterm
(sic) karena:TERM=xterm
disalahgunakan secara luas untuk emulator terminal yang berbeda dari xterm; menambahkan pemetaan ini hanya akan memperburuk situasi itu (lihat misalnya Mengapa tidak hanya menggunakan JANGKA diatur ke "xterm"? di FAQ ncurses)screen.xterm
lebih kecil kemungkinannya untuk diinstal pada sistem jarak jauh (lihat mengubah komentar dari Juni 2015 di basis data terminal).Namun, secara keseluruhan, menggunakan nama alternatif adalah peningkatan daripada penggunaan
term
di.screenrc
: Anda memecahkan lebih banyak masalah daripada yang diciptakannya. Kebalikannya berlaku padaterm
pengaturan.sumber