ฉันสามารถแมปปุ่ม Alt ใน Vim ได้หรือไม่


91

ฉันพยายามแมปโดยเพิ่มบรรทัดด้านล่างเป็น. vimrc แต่มันไม่ได้ผล ฉันตรวจสอบว่า Vimrc โหลดโดย Vim

map <Alt-D> <C-D>

มีข้อผิดพลาดในการทำแผนที่นี้หรือไม่


คุณใช้ vim ในเทอร์มินัลหรือเวอร์ชัน gui (gvim, macvim)?
Nick Knowlson

โปรดทราบว่าหากencodingการเปลี่ยนแปลงของคุณดำเนินไปหลังจากการทำแผนที่ทำงานสิ่งที่คุณได้รับจากปุ่ม Alt อาจไม่ตรงกับที่คุณตั้งไว้ในตอนแรก
ประ - เถิดเทิง

คำตอบ:


138

สำหรับผู้ใช้ Mac ที่นั่น: สำหรับการแมป ALT + hjkl ให้ใช้แทนอักขระจริงที่สร้างขึ้น (ค้นหาว่าอักขระใดที่ใช้ชุดค่าผสมขณะอยู่ในโหมด INSERT) ตัวอย่างเช่นด้วยแป้นพิมพ์ที่ฉันได้รับ:

<ALT+j> ==> ª
<ALT+k> ==> º

และอื่น ๆ พบโซลูชันที่นี่ใน StackOverflow

ฉันใช้สิ่งนี้เพื่อเลื่อนบรรทัดขึ้นและลงด้วย ALT + k \ j โดยใช้สิ่งนี้กับ. vimrc ของฉัน:

nnoremap ª :m .+1<CR>==
nnoremap º :m .-2<CR>==

inoremap ª <Esc>:m .+1<CR>==gi
inoremap º <Esc>:m .-2<CR>==gi

vnoremap ª :m '>+1<CR>gv=gv
vnoremap º :m '<-2<CR>gv=gv

ตามที่อธิบายไว้ที่นี่

หวังว่าจะมีประโยชน์สนุกกับ Vim :)

ADDENDUM BY Dylan_Larkin (2019): เพื่อให้ใช้งานได้บน Mac ต้องปิด " ใช้ Option เป็น Meta Key " ในTerminal-> Preferences-> Keyboard


10
นี่เป็นเพียงสิ่งที่ฉันมาที่นี่ (Alt + HJKL เพื่อย้ายการแยก)! ขอบคุณ!
Jamie Schembri

6
catวิธีที่ง่ายที่จะหาตัวละครที่มันเป็นคือการใช้ เพียงพิมพ์catและใส่คีย์ผสมที่คุณต้องการภายในหน้าต่าง cat พบว่า alt + วงเล็บคือ "และ" บน Mac ของฉัน
dvcrn

4
ใช้งานได้ดีในฐานะ Alt + HJKL เพื่อเลื่อนไปมาระหว่างรอยแยกนิ้วของฉันชอบมาก !! nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
John Morales

3
การแมปที่แน่นอนเหล่านี้อาจไม่ทำงานตามที่คาดไว้ใน OSX เวอร์ชันอนาคต ใช้sed -n lเพื่อดูผลลัพธ์ของ <Ak> และ <Aj> ก่อนที่คุณจะกำหนดค่าการแม็ป ในกรณีของฉัน <Aj> คือและ <Ak> คือ˚
luk3thomas

4
บน macOS เมื่อตั้งค่าUse Option as Meta Keyหรือบนโปรไฟล์ iTerm ⌥ key to Esc+จะทำงานตามปกติ (เช่นบน Linux / Unix) คุณจึงไม่จำเป็นต้องตั้งค่าบน Vim ให้แผนที่<^[j>เพียงแค่แมปกับ<A+j>หรือ<M+j>ใช้งาน
goetzc

40

:help key-notationอธิบายถึงรูปแบบที่ต้องใช้ในการแมปคีย์ต่างๆ ในกรณีของ alt คุณสามารถใช้<A-หรือ<M-. ดังนั้นการทำแผนที่ของคุณจะเป็น

map <M-d> <C-d>

ฉันขอแนะนำให้ใช้noreตัวแปรของ:map(เช่นnoremap) เว้นแต่คุณต้องการอนุญาตให้ประเมินด้านขวามืออีกครั้งอย่างชัดเจนสำหรับการจับคู่


2
สิ่งนี้ยังไม่มีผลใด ๆ อินพุต Alt + D ยังคงป้อนอักขระแปลก ๆ ให้กับ Vim
Thomson

9
นั่นเป็นปัญหาที่แยกต่างหาก terminal <A-d>ของคุณจะส่งตัวละครหลายไบต์จะเป็นกลุ่มที่เป็นกลุ่มและไม่ทราบว่าจะตีความว่าเป็น คุณอาจจะต้องเปลี่ยนการตั้งค่า terminal ของคุณเพื่อให้มันจะส่งเป็น<A-d> <Esc>d
jamessan

1
@jamessan ทำบน iterm2 ได้อย่างไร?
Finn

33

ฉันไม่แน่ใจว่า "เป็นไปได้" อีกต่อไป โปรดอ่านการอัปเดตด้านล่าง

ใช่คุณสามารถอยู่ในกลุ่มขั้ว แต่ไม่มีคำตอบที่แท้จริงทั้งหมด โดยทั่วไปคุณต้องทำตามสองขั้นตอน:

  1. ตรวจสอบให้แน่ใจว่ามี<M-d>สัญกรณ์อยู่และแมปสิ่งที่อินพุตเทอร์มินัลของคุณ ( ^[คืออักขระหลีก):

    $ cat
    ^[d
    $
    
    " in your .vimrc
    execute "set <M-d>=\ed"
    " you have to use double quotes!
    
  2. แมปบางอย่างกับชุดค่าผสมที่ "สร้าง" ใหม่ของคุณ:

    noremap <M-d> :echo "m-d works!"<cr>
    

ทำความเข้าใจวิธีการทำงานคุณสามารถขยายนี้ "เคล็ดลับ" กับคนอื่น ๆ รวมกัน "แปลก" ตัวอย่างเช่นผมใช้ปลวกและเป็นกลุ่มไม่รู้จักใช้แมวที่ฉันได้รับ<S-F1> ^[[1;2Pจากนั้นใน vimrc ของฉันฉันทำ: execute "set <S-F1>=\e[1;2P"แล้วฉันสามารถแมปกับอะไรก็ได้

หมายเหตุ:ผมไม่ทราบว่าทำไม แต่สำหรับบางคนที่ใช้งานแทน\<Esc>\e


อัปเดต (กุมภาพันธ์ 2559)

ขึ้นอยู่กับข้อมูลปลายทางที่เทอร์มินัลของคุณรันบางทีคุณอาจจะ ... ในเทอร์มินัลส่วนใหญ่เช่น "alt + h" ถูกแมปกับ^[hซึ่งก็คือ: "escape + h" มันจึงเขียนทับคีย์ได้ ฉันเพิ่งลอง (อีกครั้ง) และดูเหมือนว่าจะได้ผล แต่ฉันเชื่อว่ามันเป็นการใช้งานที่มีปัญหาและเกิดข้อผิดพลาดได้ง่าย

อย่างไรก็ตามสำหรับผู้กล้าพอนี่คือปลั๊กอินทดลอง:


แทนที่จะเป็นสิ่งที่คุณก็สามารถใช้โดยตรงexecute "set... เป็นจริงตัวหนีเข้ามาด้วย สิ่งนี้จำเป็นใน rxvt / urxvt แต่ xterm ไม่จำเป็นต้องได้รับการดูแลเป็นพิเศษ ข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้ในวิกิพีเดียเป็นกลุ่ม set <M-d>=^[d^[C-v-Esc
Micah Elliott

มีวิธีการที่คล้ายคลึงกับสิ่งนี้ที่จะทำงานกับ tmux เพื่อที่ว่า Md สามารถผูกได้หรือไม่?
George

2
สำหรับผม<Esc>แล้วdตอนนี้จะเป็นสิ่งเดียวกันเป็น+<Alt> dนอกจากนี้คุณก็สามารถทำเช่นนี้ในบรรทัดเดียวกับCtrl-v, <Esc>เป็นต่อที่นี่
Sparhawk

24

Map Alt Key ใน Vim บน Mac OSx:

เริ่มต้นด้วยการดูรหัสคีย์ที่เครื่องปลายทางของคุณส่งไปยังกลุ่ม:

$ sed -n l
^[[1;9D 

Alt + Leftในตัวอย่างข้างต้นฉันวิ่งคำสั่งและกด

^[[1;9Dเป็นลำดับหนีถูกส่งไปเป็นกลุ่มเพื่อให้เราสามารถใช้สำหรับการทำแผนที่ของเรา

map <Esc>[1;9D 

3
หากคุณใช้แอพ iTerm2 คุณควรตรวจสอบวิธีการแมปคีย์ในโปรไฟล์> คีย์
fikovnik

1
ด้วยOptionคีย์ซ้าย( ) ที่กำหนดค่าไว้Esc+ใน iTerm2 ฉันสามารถแมปalt+qเพื่อออกจากกลุ่ม: nnoremap <silent> <Esc>q :qa!<cr>
ryenus

คุณยังสามารถตั้งค่า iTerm2 ให้ทำงานกับการรีแมปนั้นได้หากคุณไปที่การตั้งค่า> โปรไฟล์เลือกโปรไฟล์ปัจจุบันของคุณไปที่แท็บ "คีย์" สำหรับโปรไฟล์นั้นและเปลี่ยนตัวเลือกที่ระบุว่า "คีย์ซ้าย" เป็น "Esc +" (ใช้ได้ ตัวเลือกคือ "Normal", "Meta" และ "Esc +")
Giovanni Benussi

12

ใช้:

map <A-D> <C-D>

ดู:help key-notation.


1
ดูเหมือนว่าจะยังไม่ได้ผล Alt + d จะป้อนอักขระแปลก ๆ ให้กับ Vim ซึ่งเหมือนกับกรณี unmap
Thomson

ใช้ได้กับฉัน (ฉันใช้gvimบน Windows)
Deqing

8

เทอร์มินัลของคุณอาจส่ง Alt-D "ไม่ถูกต้อง" คุณสามารถใช้ CV เพื่อรับลำดับการหลีกเลี่ยงจริงที่ส่งไปยังกลุ่มและใช้เพื่อสร้างการแมปของคุณ เช่นแก้ไข. vimrc ของคุณและแทนที่จริงโดยพิมพ์ลำดับต่อไปนี้ "CV Alt-D" ดังนั้นคุณจะมีลำดับการหลีกเลี่ยงที่ถูกต้องใน vimrc ของคุณ จะใช้ไม่ได้ถ้าเทอร์มินัลของคุณไม่ส่งอะไรไปที่กลุ่ม


8

My Terminal จะสร้าง^[xคำสั่ง (เช่นสำหรับ alt-x) สิ่งที่ทำให้มันทำงานได้ใน Vim คือสคริปต์เล็ก ๆ จาก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 ทั้งหมด


1

เป็นตามขึ้นไปคำตอบของบรูโน่สำหรับผู้ใช้ Mac Esc+พยายามทำให้แน่ใจว่าปุ่มตัวเลือกของคุณถูกแมปไป

สิ่งนี้จะทำให้คุณมีลักษณะการทำงาน "ปกติ" ของAคีย์option ( ) ใน Vim

ตัวอย่างเช่นในiterm2ตัวเลือกนี้สามารถพบได้ภายใต้Preferences > Profiles > Keys:

ภาพหน้าจอการตั้งค่า iterm2


ฉันต้องเปลี่ยนการกำหนดค่าเป็นnnoremap <Esc>j :m .+1<CR>==และคล้ายกัน ...
mihaipopescu

0

สวัสดีหลังจากไม่มีวิธีแก้ปัญหาที่ดีหลังจากทดสอบข้างต้นทั้งหมดบน mac มาหลายปีฉันก็ค้นหาต่อไป

นี่คือทางออกของฉัน:

ในการสร้างการกดแป้นพิมพ์แบบผสมรวมถึง Alt คุณต้องประกาศชุดค่าผสมในการกำหนดลักษณะ> แป้นพิมพ์และใช้ชุดค่าผสมนั้นในไฟล์การตั้งค่าเป็นกลุ่ม (เลือกใช้ตัวเลือกเป็นเมตาคีย์)

ผลลัพธ์ต้องเป็นอักขระที่ผิดปกติ (ไม่มีaเช่น) เพื่อที่คุณจะได้ไม่ลบล้างอักขระทั่วไป

ในตัวอย่างด้านล่างคุณควรจะเป็นกลุ่มด้วย ALT-Up

การตั้งค่าเป็นกลุ่ม: การตั้งค่าเป็นกลุ่ม

การตั้งค่า mac: การตั้งค่า mac

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