ฉันพยายามแมปโดยเพิ่มบรรทัดด้านล่างเป็น. vimrc แต่มันไม่ได้ผล ฉันตรวจสอบว่า Vimrc โหลดโดย Vim
map <Alt-D> <C-D>
มีข้อผิดพลาดในการทำแผนที่นี้หรือไม่
ฉันพยายามแมปโดยเพิ่มบรรทัดด้านล่างเป็น. vimrc แต่มันไม่ได้ผล ฉันตรวจสอบว่า Vimrc โหลดโดย Vim
map <Alt-D> <C-D>
มีข้อผิดพลาดในการทำแผนที่นี้หรือไม่
encoding
การเปลี่ยนแปลงของคุณดำเนินไปหลังจากการทำแผนที่ทำงานสิ่งที่คุณได้รับจากปุ่ม Alt อาจไม่ตรงกับที่คุณตั้งไว้ในตอนแรก
คำตอบ:
สำหรับผู้ใช้ 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
cat
วิธีที่ง่ายที่จะหาตัวละครที่มันเป็นคือการใช้ เพียงพิมพ์cat
และใส่คีย์ผสมที่คุณต้องการภายในหน้าต่าง cat พบว่า alt + วงเล็บคือ "และ" บน Mac ของฉัน
nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
sed -n l
เพื่อดูผลลัพธ์ของ <Ak> และ <Aj> ก่อนที่คุณจะกำหนดค่าการแม็ป ในกรณีของฉัน <Aj> คือ∆
และ <Ak> คือ˚
Use Option as Meta Key
หรือบนโปรไฟล์ iTerm ⌥ key to Esc+
จะทำงานตามปกติ (เช่นบน Linux / Unix) คุณจึงไม่จำเป็นต้องตั้งค่าบน Vim ให้แผนที่<^[j>
เพียงแค่แมปกับ<A+j>
หรือ<M+j>
ใช้งาน
:help key-notation
อธิบายถึงรูปแบบที่ต้องใช้ในการแมปคีย์ต่างๆ ในกรณีของ alt คุณสามารถใช้<A-
หรือ<M-
. ดังนั้นการทำแผนที่ของคุณจะเป็น
map <M-d> <C-d>
ฉันขอแนะนำให้ใช้nore
ตัวแปรของ:map
(เช่นnoremap
) เว้นแต่คุณต้องการอนุญาตให้ประเมินด้านขวามืออีกครั้งอย่างชัดเจนสำหรับการจับคู่
<A-d>
ของคุณจะส่งตัวละครหลายไบต์จะเป็นกลุ่มที่เป็นกลุ่มและไม่ทราบว่าจะตีความว่าเป็น คุณอาจจะต้องเปลี่ยนการตั้งค่า terminal ของคุณเพื่อให้มันจะส่งเป็น<A-d>
<Esc>d
ฉันไม่แน่ใจว่า "เป็นไปได้" อีกต่อไป โปรดอ่านการอัปเดตด้านล่าง
ใช่คุณสามารถอยู่ในกลุ่มขั้ว แต่ไม่มีคำตอบที่แท้จริงทั้งหมด โดยทั่วไปคุณต้องทำตามสองขั้นตอน:
ตรวจสอบให้แน่ใจว่ามี<M-d>
สัญกรณ์อยู่และแมปสิ่งที่อินพุตเทอร์มินัลของคุณ ( ^[
คืออักขระหลีก):
$ cat
^[d
$
" in your .vimrc
execute "set <M-d>=\ed"
" you have to use double quotes!
แมปบางอย่างกับชุดค่าผสมที่ "สร้าง" ใหม่ของคุณ:
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
<Esc>
แล้วd
ตอนนี้จะเป็นสิ่งเดียวกันเป็น+<Alt>
d
นอกจากนี้คุณก็สามารถทำเช่นนี้ในบรรทัดเดียวกับCtrl-v
, <Esc>
เป็นต่อที่นี่
Map Alt Key ใน Vim บน Mac OSx:
เริ่มต้นด้วยการดูรหัสคีย์ที่เครื่องปลายทางของคุณส่งไปยังกลุ่ม:
$ sed -n l
^[[1;9D
Alt + Leftในตัวอย่างข้างต้นฉันวิ่งคำสั่งและกด
^[[1;9D
เป็นลำดับหนีถูกส่งไปเป็นกลุ่มเพื่อให้เราสามารถใช้สำหรับการทำแผนที่ของเรา
map <Esc>[1;9D
Option
คีย์ซ้าย( ⌥
) ที่กำหนดค่าไว้Esc+
ใน iTerm2 ฉันสามารถแมปalt+q
เพื่อออกจากกลุ่ม: nnoremap <silent> <Esc>q :qa!<cr>
เทอร์มินัลของคุณอาจส่ง Alt-D "ไม่ถูกต้อง" คุณสามารถใช้ CV เพื่อรับลำดับการหลีกเลี่ยงจริงที่ส่งไปยังกลุ่มและใช้เพื่อสร้างการแมปของคุณ เช่นแก้ไข. vimrc ของคุณและแทนที่จริงโดยพิมพ์ลำดับต่อไปนี้ "CV Alt-D" ดังนั้นคุณจะมีลำดับการหลีกเลี่ยงที่ถูกต้องใน vimrc ของคุณ จะใช้ไม่ได้ถ้าเทอร์มินัลของคุณไม่ส่งอะไรไปที่กลุ่ม
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 ทั้งหมด
สวัสดีหลังจากไม่มีวิธีแก้ปัญหาที่ดีหลังจากทดสอบข้างต้นทั้งหมดบน mac มาหลายปีฉันก็ค้นหาต่อไป
นี่คือทางออกของฉัน:
ในการสร้างการกดแป้นพิมพ์แบบผสมรวมถึง Alt คุณต้องประกาศชุดค่าผสมในการกำหนดลักษณะ> แป้นพิมพ์และใช้ชุดค่าผสมนั้นในไฟล์การตั้งค่าเป็นกลุ่ม (เลือกใช้ตัวเลือกเป็นเมตาคีย์)
ผลลัพธ์ต้องเป็นอักขระที่ผิดปกติ (ไม่มีa
เช่น) เพื่อที่คุณจะได้ไม่ลบล้างอักขระทั่วไป
ในตัวอย่างด้านล่างคุณควรจะเป็นกลุ่มด้วย ALT-Up
การตั้งค่าเป็นกลุ่ม:
การตั้งค่า mac: