ในการจัดการกับ splits ฉันใช้submode-pluginซึ่งสะดวกสบายจริง ๆ : ช่วยให้คุณสร้างโหมดใหม่ ("โหมด" เช่นในโหมดปกติ, โหมดภาพ, โหมดแทรก, ฯลฯ ... ) ซึ่งคุณกำหนดการเชื่อมโยงคีย์ใหม่ .
เมื่อคุณไม่ต้องใช้Ctrl+wอีกต่อไปและเมื่อคุณอยู่ในโหมดใหม่ปุ่มทั้งหมดมีอิสระในการผูก: ไม่มีปัญหามากขึ้นเช่น "ประณามฉันไม่สามารถหาชุดค่าผสมที่สำคัญซึ่งเป็นการแสดงความหมายและยังไม่ได้แมป "
คุณสามารถติดตั้งปลั๊กอินด้วยตัวจัดการปลั๊กอินทั่วไปและนี่คือการกำหนดค่าบางอย่างของฉันเพื่อให้แรงบันดาลใจกับคุณ:
ฉันสร้างโหมดใหม่ที่ฉันเรียกWindowsMode
ซึ่งฉันจัดการกับตัวแยก:
call submode#enter_with('WindowsMode', 'n', '', '<Leader>k', ':echo "windows mode"<CR>')
call submode#leave_with('WindowsMode', 'n', '', '<Leader>')
เส้นเหล่านี้หมายความว่าฉันเข้าสู่โหมดด้วยLeaderkและฉันออกจากโหมดด้วยLeader: หลังจากฉันกดปุ่มLeaderkทั้งหมดที่ฉันกดจะ:
- ไม่ทำอะไรเลยถ้าฉันไม่ได้กำหนดแผนที่สำหรับพวกเขาในโหมดนี้
- ทำสิ่งที่ฉันตัดสินใจทำแผนที่ในโหมดนี้ (ดูคำตอบที่เหลือ)
- กลับไปที่โหมดปกติถ้าฉันโดน Leader
เมื่อฉันอยู่ในWindowsMode
สายเหล่านี้ให้hjklนำทางผ่านแยกเช่นCtrl+whjkl
" Change of windows with hjkl
call submode#map('WindowsMode', 'n', '', 'j', '<C-w>j')
call submode#map('WindowsMode', 'n', '', 'k', '<C-w>k')
call submode#map('WindowsMode', 'n', '', 'h', '<C-w>h')
call submode#map('WindowsMode', 'n', '', 'l', '<C-w>l')
ฉันใช้บรรทัดเหล่านี้เพื่อแยกหน้าต่างด้วย/และ!:
" split windows with / and !
call submode#map('WindowsMode', 'n', '', '/', '<C-w>s')
call submode#map('WindowsMode', 'n', '', '!', '<C-w>v')
และqปิดการแยก:
call submode#map('WindowsMode', 'n', '', 'q', '<C-w>c')
ย้ายตัวแยกด้วยCtrlhjkl:
call submode#map('WindowsMode', 'n', '', '<C-j>', '<C-w>J')
call submode#map('WindowsMode', 'n', '', '<C-k>', '<C-w>K')
call submode#map('WindowsMode', 'n', '', '<C-h>', '<C-w>H')
call submode#map('WindowsMode', 'n', '', '<C-l>', '<C-w>L')
Vim-submode อนุญาตให้ทำสิ่งที่ทรงพลังมากมายดูเอกสารสำหรับรายละเอียดเพิ่มเติม
แก้ไขวิธีการของ submode หน้าต่างก็คือการอธิบายไว้ที่นี่ ฉันคิดว่าวิธีการที่ผู้เขียนใช้นั้นใกล้เคียงกว่าที่จะตอบคำถาม: ที่นี่ถูกใช้เพื่อสร้างโหมดใหม่ แต่การ<c-w>something
แมปทั้งหมดพร้อมใช้งานด้วยปุ่มเดียวกันใน submode:
" Go through every letter
for key in ['a','b','c','d','e','f','g','h','i','j','k','l','m',
\ 'n','o','p','q','r','s','t','u','v','w','x','y','z']
" maps lowercase, uppercase and <C-key>
call submode#map('window', 'n', '', key, '<C-w>' . key)
call submode#map('window', 'n', '', toupper(key), '<C-w>' . toupper(key))
call submode#map('window', 'n', '', '<C-' . key . '>', '<C-w>' . '<C-'.key . '>')
endfor
" Go through symbols. Sadly, '|', not supported in submode plugin.
for key in ['=','_','+','-','<','>']
call submode#map('window', 'n', '', key, '<C-w>' . key)
endfor
วิธีนี้ทุกแมป<c-w>lowerCaseKey
, <c-w>upperCaseKey
, <c-w><c-Key>
และแมป<c-w>=_+-<>
ทั้งหมดสามารถเข้าถึงได้ในโหมดหน้าต่างโดยไม่มีคำนำหน้า<c-w>
wincmd
ตัวอย่างเช่นคุณสามารถจับคู่แผนที่::nmap wj :wincmd j<cr>
มันทำหน้าที่เหมือนกับCTRL-W j
(เลื่อนไปที่หน้าต่างด้านล่าง):help wincmd