Memperbaiki CTRL- * dalam vim di bawah layar GNU


10

Saat menjalankan vim di bawah layar GNU, saya menemukan bahwa kombinasi CTRLdengan tanda panah dan Pg * tidak berfungsi seperti yang diharapkan.

Saya menggunakan vim-gnomepaket 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 vimadalah 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).


+1 - Saya mengalami masalah yang sama dan - seperti yang Anda sarankan - menambahkan term xtermke ~/.screenrcfile saya memperbaikinya untuk saya. Terima kasih lagi!
Justin Ethier

Jawaban:


4

Seperti berintuisi dinyatakan dalam update-nya, menambahkan term xtermke ~/.screenrcfile yang tampaknya untuk memperbaiki masalah ini.


Ya .. ya, tapi saya ingin menjelaskan mengapa screentidak hanya menyebarkan $TERMvariabel lingkungan daripada menimpanya "screen". Agaknya ada beberapa keadaan di mana itu penting untuk dimiliki $TERM == screen.
intuited

3
@intuited: Alasan set Layar TERM=screenadalah 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.
Gilles 'SANGAT berhenti menjadi jahat'

@Gilles: Terima kasih, saya curiga sesuatu seperti itu. Masalah apa yang bisa muncul dari mengatur ulang xterm?
intuited

1
Tidak banyak, karena xterm dan layar sebagian besar kompatibel. Tetapi masing-masing memiliki beberapa kemampuan yang yang lainnya tidak, dan jika Anda berbohong pada aplikasi, mereka mungkin menggunakan kemampuan yang tidak benar-benar berfungsi. Bandingkan output dari infocmp screendan infocmp 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.
Gilles 'SO- stop being evil'

2

Ada beberapa cara lain untuk mengatur terminal yang berfungsi dalam menjalankan proses:

  • Dalam instance layar yang sedang berjalan, menekan ^A- :dan mengeluarkan perintah term xtermakan menyebabkan layar yang baru dibuka di bawah instance itu dimulai dengan $TERMvariabel lingkungan mereka diatur ke xterm; ini pada gilirannya akan menyebar ke viminstance 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 ~/.screenrcfile, jadi ada kemungkinan bahwa metode ini digunakan pada komputer lain.

  • Dalam instance vim yang sedang berjalan, perintah set term=xtermakan 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=screendijalankan dalam contoh vim dimulai dengan $TERM=xterm.


Jawaban ini diambil dari pembaruan OP. Yang saya lakukan adalah memformat ulang dan menulis ulang sedikit.
phunehehe

2

Masalah mendasarnya adalah pemetaan yang dilakukan screenantara terminal aktual (diidentifikasi oleh TERMvariabel lingkungan di luar screen) dan emulasi di dalamnya screentidak lengkap.

Jika Anda mengujinya (menggunakan vttest atau tack ), Anda mungkin melihat adanya kekurangan

  • warna
  • kunci khusus

Mencoba untuk memperbaiki masalah ini dengan menetapkan termdalam .screenrcmemiliki kelemahan bahwa ia bekerja hanya untuk diberikan aktual-terminal, dan tidak portabel untuk implementasi terminal lainnya. The dokumentasi catatan

Penggunaan istilah perintah tidak disarankan untuk tujuan non-standar.

Ada solusi lain (dengan kelemahan berbeda), menggunakan fitur ini dari screen dokumentasi :

Ketika layar mencoba mencari nama terminal untuk dirinya sendiri, pertama-tama layar mencari entri yang bernama layar. istilah , di mana istilah adalah isi dari $TERMvariabel Anda . Jika tidak ada entri seperti itu, layar mencoba screen(atau screen-w, jika terminal lebar (132 cols atau lebih)). Jika bahkan entri ini tidak dapat ditemukan, vt100digunakan sebagai pengganti.

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 termpengaturan 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 menggunakan term, alternatif ini akan menjadi alias sederhana screen. Mereka tidak.

ncurses tidak menyediakan screen.xterm(sic) karena:

  • TERM=xtermdisalahgunakan 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)
  • nama alternatif screen.xtermlebih 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 termdi .screenrc: Anda memecahkan lebih banyak masalah daripada yang diciptakannya. Kebalikannya berlaku pada termpengaturan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.