จะแก้ไข Ctrl + ลูกศรใน Vim ได้อย่างไร?


26

ฉันกำลังใช้Putty -> Suse box -> vim 7.2คำสั่งผสมสำหรับการแก้ไขและต้องการทำการแมปคำสั่งผสม Ctrl + ลูกศรเพื่องานเฉพาะ แต่ด้วยเหตุผลบางอย่าง Vim จะละเว้นทางลัดและเข้าสู่โหมดแทรกและแทรกอักขระ "D" (สำหรับซ้าย) ของ "C" (ขวา)

ส่วนใดของการกำหนดค่าคีย์บอร์ด / เทอร์มินัลของฉันคือการตำหนิและวิธีแก้ไข


PuTTY ไม่ส่งลำดับที่แตกต่างอย่างเป็นประโยชน์สำหรับลูกศรควบคุม คำตอบที่แนะนำไม่ถูกต้อง (หรือมีประโยชน์)
Thomas Dickey

คำตอบ:


27

คิดออกว่าสิ่งที่หนีลำดับของคุณส่งCtrl+ ลูกศรโดยการพิมพ์Ctrl+ V, Ctrl+ ลูกศรในโหมดแทรก: สิ่งนี้จะแทรกESCตัวละครนำ(แสดง^[ในกลุ่ม) อย่างแท้จริงตามด้วยส่วนที่เหลือของลำดับหนี จากนั้นบอกสิ่งที่เป็นความลับเกี่ยวกับลำดับการหลบหนีเหล่านี้ด้วยบางสิ่ง

map <ESC>[5D <C-Left>
map <ESC>[5C <C-Right>
map! <ESC>[5D <C-Left>
map! <ESC>[5C <C-Right>

ฉันดูเหมือนจะจำได้ว่า Putty มีการตั้งค่าเริ่มต้นสำหรับโหมด Application Cursor Keysที่ไม่สะดวก (ฉันลืมสาเหตุ) คุณอาจต้องการสลับการตั้งค่านี้ก่อน

โปรดทราบว่าแม้ว่าลำดับการหลีกเลี่ยงจะแตกต่างกันไประหว่างเทอร์มินัลความขัดแย้ง (เช่นลำดับการหลบหลีกที่สอดคล้องกับคีย์ที่แตกต่างกันในเทอร์มินัลที่แตกต่างกัน) นั้นหายากดังนั้นจึงไม่จำเป็นต้องลอง


ฉันจะบอกได้อย่างไรว่า escape sequence ถูกส่งไปแล้ว?
Alex B

@Alex: ฉันพยายามอธิบายคำอธิบายของฉันให้ชัดเจนถ้าคุณยังไม่เข้าใจประโยคแรกของฉัน
Gilles 'หยุดความชั่วร้าย'

คุณยังสามารถเรียกใช้od -aหรือod -cถ้าคุณขุดเลขฐานแปดแล้วพิมพ์คีย์ที่เป็นปัญหา ดู "เพิ่ม" ในคำตอบของฉันสำหรับตัวอย่าง
msw

ขออภัยสำหรับการเดินทางกลับไปที่คำถามนี้เพื่อให้ปลาย แต่ฉันคิดว่าฉาบยังคงส่งแอปพลิเคคีย์เคอร์เซอร์ไปที่ขั้วแม้หลังจากที่ฉันจะปิดอย่างสมบูรณ์ ฉันกำลังสูญเสียสิ่งที่ฉันควรปรับแต่งเพื่อให้มันหายไป
อเล็กซ์ B

@Alex: คุณไม่จำเป็นต้องทำให้มันหายไปคุณสามารถบอกแอปพลิเคชันของคุณเกี่ยวกับพวกเขาได้ (ซึ่งฉันพบว่าเป็นเส้นทางของการต่อต้านน้อยที่สุด) หรือคุณสามารถแทนที่ PuTTY ด้วยตัวเลือกใดตัวเลือกหนึ่งเช่น mintty plus Cygwin ssh (แต่มันกำลังจะปิดหัวข้อสำหรับเว็บไซต์นี้)
Gilles 'หยุดความชั่วร้าย'

7

ทางออกที่ดีที่สุดของคุณน่าจะดูที่การกำหนดค่าโหมด Application Cursor Keysของ PuTTY

ลำดับเริ่มต้นส่งESCเป็นคำนำหน้าและ[ตามด้วยAppend หรือChange หรือสิ่งอื่น ๆ ที่ทำให้คุณเข้าสู่โหมดแทรก

เพิ่มแล้วติดตาม Gilles

เวอร์ชันที่ชัดเจนยิ่งขึ้นของ ^ V Escape สามารถดูได้ด้วย od (1) นี่คือฉันพิมพ์ ^ ขึ้น, ^ ลง, ^ ขวา, ^ เหลือที่เทอร์มินัลของฉัน:

$ od -a
0000000 esc   [   1   ;   5   A esc   [   1   ;   5   B esc   [   1   ;
0000020   5   C esc   [   1   ;   5   D

ดังนั้นเทอร์มินัลของฉันจะส่ง^[[1;5Aเมื่อฉันกดCtrl+


การปิดโหมด Cursor Keys ของแอปพลิเคชันดูเหมือนจะไม่ช่วย
Alex B

2

ฉันพบทางออกที่ดีกว่าที่นี่: http://vim.wikia.com/wiki/Fix_arrow_keys_that_display_A_B_C_D_on_remote_shell

เพียงใส่สตริงนี้ใน.vimrcไฟล์ของคุณ:

:set term=cons25

ปรับปรุง

คัดลอกไฟล์นี้ไปยังของคุณ/homeเปลี่ยนชื่อ.vimrc:

/usr/share/vim/vim_VERSION_/vimrc_example.vim

สิ่งนี้จะสร้างพฤติกรรมที่แปลกประหลาด
Thibault

0

สำหรับปัญหาเกี่ยวกับคีย์บอร์ดนี้และอื่น ๆ ของฉันฉันทำได้

vim ~/.vimrc
set nocompatible
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.