วิธีการทำแผนที่ปุ่ม Alt?


37

ฉันพยายามแมปAltรหัสด้วยวิธีต่อไปนี้:

:map <A-j> j
:map <A-k> k

แต่มันไม่ทำงาน (เบลล์ดังขึ้นAlt + j/ Alt + k)

สิ่งที่ฉันหายไป?

ฉันใช้ Terminal บน OSX สิ่งเดียวกันนี้เกิดขึ้นกับ Linux ระยะไกล


เมื่อวันที่Ctrl + v, Alt + jฉันมี: ?~H~F( เมื่อencoding=utf-8)

เมื่อวันที่Ctrl + v, Alt + kฉันมี: ?~Z( ˚เมื่อencoding=utf-8)

การใช้เสียงเรียกเข้าที่ไม่มีปลั๊กอิน ( -u NONE) ไม่ได้สร้างความแตกต่างเลย


1
ไม่Alt(กดไม่ค้าง) แล้วjทำงานหรือไม่ ด้วยxtermอย่างน้อยฉันต้องตั้งmetaSendsEscapeเพื่อtrue ที่จะได้รับลำดับเหล่านี้ในการทำงาน ... ผมไม่ทราบว่าคุณมีปัญหาเดียวกันและฉันไม่ได้ใช้ OSX ดังนั้นผมจึงไม่สามารถทดสอบ ...
มาร์ติน Tournoij

@Carpetsmoker กดAltปล่อยแล้วjหรือปุ่มอื่น ๆ ทำงานตามปกติ ฉันได้ตรวจสอบและพบตัวเลือก'ใช้ตัวเลือกเป็นเมตาคีย์'เปิดใช้งานและใช้งานได้ในขณะนี้ metaSendsEscapeขอบคุณที่ตั้งค่า
kenorb

3
ก่อนหน้านี้มีการตอบคำถามนี้ (พร้อมการตอบสนองที่ดีกว่า) ที่นี่: stackoverflow.com/questions/6778961/…
3751385

คำตอบ:


35

นั่นเป็นวิธีที่ฉันทำบน Linux หรือ Cygwin:

ก่อนอื่นให้ตรวจสอบว่าตัวอักษรใดบ้างที่ส่งโดยเครื่องของคุณเมื่อคุณกดALT+ J:

ในการทำเช่นนี้ฉันจะไปที่คอนโซลและเรียกใช้sed -n l(คุณสามารถใช้catมันได้) จากนั้นฉันกดALT+ Jและดูว่าตัวอักษรบนหน้าจอเป็น^[jอย่างไร

ฉันแทนที่^[ด้วย\e(เพราะนั่นคือสิ่งที่จะถูกส่งโดย terminal ของฉันเมื่อฉันกดesc) \ejและสตริงสุดท้ายสำหรับฉันก็คือ

จากนั้นฉันเขียนถึง.vimrc:

execute "set <M-j>=\ej"
nnoremap <M-j> j

และการทำแผนที่ใช้งานได้


4
ฉันหาเอกสารสำหรับ:set <M-j>=\ejส่วนนี้ไม่พบ ฉันควรค้นหาอะไร
Evgeni Sergeev

1
ขอบคุณสำหรับคำตอบนี่เป็นทางออกเดียวที่ได้ผลสำหรับฉันด้วย Iterm + vim
newUserName ที่นี่

ไม่นี่ไม่ได้ผล บางครั้ง ESC-J จะทำหน้าที่เป็น ALT-J
user3751385

1
@EvgeniSergeev See:help :set-termcap
รวย

9

ด้วยความช่วยเหลือของCarpetsmokerดูเหมือนว่าเทอร์มินัลจะไม่ได้รับการกำหนดค่าเป็น 'ใช้ Alt / ตัวเลือกเป็นเมตาคีย์' (นี่เป็นเรื่องธรรมดาสำหรับ GUI เทอร์มินัล)

สำหรับเทอร์มิใน OSX ก็อยู่ในการตั้งค่า -> Settings -> แท็บ Keyboard -> 'ตัวเลือกใช้เป็นคีย์เมตา' ตรวจสอบ: ฉันจะเปลี่ยนเทอร์มินัลให้ใช้ตัวเลือกเป็นเมตาคีย์ได้อย่างไร ( Mavericks )

สำหรับ XTerm ให้ตรวจสอบ: การกำหนดค่า XTerm ให้เป็น Default to Meta Sends Escapeซึ่งระบุว่า:

เพิ่มบรรทัดนี้ทุกที่ในไฟล์. Xdefaults ส่วนตัวของคุณ ( ~/.Xdefaults):

xterm*metaSendsEscape: true

จากนั้นโหลดการกำหนดค่าใหม่ด้วย xrdb หากไม่มีขั้นตอนนี้การเปลี่ยนแปลง.Xdefaultsจะไม่มีผลจนกว่าการรีสตาร์ท X ครั้งถัดไปจะเป็น:

xrdb -l ~/.Xdefaults

จากนั้นการจับคู่มาตรฐานด้วยAltคีย์เช่น:

:map <A-j> j
:map <A-k> k

ทำงานได้ดี

สำหรับความช่วยเหลือโปรดดู: :h :map-alt-keys.


4
อาจต้องการดู:h :map-alt-keysเป็นแหล่งข้อมูลอื่น
Peter Rincker

4

คล้ายกับคำตอบของ Kossak แต่ง่ายกว่าเล็กน้อยโดยการจับคู่กดปุ่มตัวอักษร

ไม่ว่าจะอยู่ในโหมดปกติหลังจากกด:หรือแทรกลงใน.vimrcแผนที่ของคุณป้อนข้อมูลโดยตรงโดยเริ่มต้นการทำแผนที่:

nnoremap 

จากนั้นกดปุ่มCtrl+ Vแล้วกดแป้นพิมพ์เพื่อบันทึกเช่น+Alt สิ่งนี้จะแสดงเป็นดังนี้:

nnoremap ^[[1;3D

แต่^[อักขระแต่ละตัวเป็นอักขระยกเว้นตัวอักษรและการเน้นไวยากรณ์ที่แท้จริงควรแสดงสิ่งนี้ แทนที่ตัวอักษรตามตัวอักษรด้วยข้อความ<Esc>และผนวกคำสั่งที่คุณต้องการใช้:

nnoremap <Esc>[1;3D <C-w>h

ฉันรู้ว่า OP คือการทำแผนที่Alt+ ตัวอักษร แต่ฉันใช้ลูกศรเพื่อแสดงวิธีการทำบางสิ่งบางอย่างที่อาจไม่ถูกแมปโดยค่าเริ่มต้น


ทำงานเหมือนมีเสน่ห์ขอบคุณมาก!
aryndin

2

สิ่งนี้ใช้ได้กับฉันใน Ubuntu 16.04 xfce terminal (และ terminal alacritty rust)

ตั้งค่าตัวเรียกข้อมูลโค้ด ultisnip เป็นMeta-/(เช่นเดียวกับตัวอย่างข้อมูล emacs)

let g:UltiSnipsExpandTrigger="^[/"

ตอนนี้ฉันพิมพ์^[/เป็นกลุ่ม

ในโหมดแทรก Ctrl-V Alt-/

( Metaเป็นAltกุญแจสำคัญในแป้นพิมพ์ PC ของฉัน)


1

หากControl+Vตามด้วยALT-xรายการ^[x(พิมพ์ในเทอร์มินัล) คุณสามารถแก้ไขได้ด้วยสคริปต์เล็ก ๆ นี้จากvim.wikia.com :

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

เพิ่มใน. vimrc สำหรับการจับคู่คีย์ alt ทั้งหมด

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