วิธีการปิดการใช้งานปุ่มลูกศรในกลุ่ม?


24

ฉันต้องการสอนตัวเองโดยใช้ hjkl มากกว่าใช้ปุ่มลูกศรเพื่ออยู่ในแถวบ้าน และใช่ฉันทราบดีว่าไม่ควรใช้ hjkl เป็นปุ่มนำทางหลัก ถึงกระนั้นนิสัยของฉันก็ค่อนข้างแรงและฉันก็ไม่รู้ด้วยซ้ำว่ามันทำให้มือนั้นขยับไปยังปุ่มลูกศรและฉันก็อยากจะแก้มัน

หากต้องการทำลายนิสัยดังกล่าว: ฉันจะปิดใช้งานแป้นลูกศรเพื่อให้ฉันถูกบังคับให้ใช้ hjkl หรือวิธีการนำทางอื่น ๆ ได้อย่างไร

ในฐานะโบนัสมันจะมีประโยชน์ถ้ามีข้อความที่แสดงDont't use this!ว่ายังไม่ได้รับคำสั่ง หากพวกเขาไม่ทำงานมันจะทำให้ฉันสับสนมากพอที่จะคิดใหม่นิสัยของฉัน


4
ไม่มีจุดที่ทำอย่างนั้น; HJKL ดูดได้มากเท่ากับลูกศร
romainl

6
ฉันคิดว่า @romainl อาจชี้ให้เห็นว่าการเน้นไปที่การใช้การเคลื่อนไหวที่ทรงพลังของ vim นั้นสำคัญกว่า(เช่นwสำหรับคำ}ถัดไปสำหรับย่อหน้าnถัดไปสำหรับการจับคู่ผลการค้นหาfzถัดไปสำหรับการปรากฏครั้งต่อไปของzบรรทัดปัจจุบัน ฯลฯ ) ละเอียดเป็นตัวอักษรเดียว ฉันเห็นด้วยกับสิ่งนี้อย่างแน่นอน อย่างไรก็ตาม HJKL นั้นดีกว่าปุ่มลูกศรแน่นอนว่าคุณไม่จำเป็นต้องขยับมือจากแถวบ้าน ฉันมักจะพิมพ์สิ่งที่ชอบjAซึ่งเร็วกว่า<Down>Aมากและไม่สามารถเอาชนะได้โดยการเคลื่อนไหวใด ๆ
wchargin

4
@ ฉีด: ฉันคิดว่าฉันมีการสนทนากับคุณก่อนนี้ ไม่ใช่ vimmers ใช้ลูกศรและไม่ใช้กับ HJKL เป็นการดีที่คุณไม่ต้องการใช้อย่างใดอย่างหนึ่ง; แต่การปิดกั้นลูกศร (ไม่ใช่ HJKL) จะทำให้ผู้คนหยุดชั่วคราวและไตร่ตรองสิ่งที่พวกเขากำลังทำอยู่ (ในขณะที่ยังคงเปิด HJKL ไว้เป็นทางเลือกในกรณีที่เป็นตัวเลือกที่ดีที่สุดจริง ๆ หรือในกรณีที่ผู้ใช้กำลังนิ่งเงียบ การเคลื่อนไหวที่ทรงพลังยิ่งขึ้น) คือมันไม่ได้เกี่ยวกับการเรียนรู้ HJKL มันเป็นเรื่องเกี่ยวกับการปิดกั้นอัตโนมัติที่ได้เรียนรู้ในบรรณาธิการอื่น ๆ
Amadan

1
@Carpetsmoker กลับหัวกลับหางกุญแจ hjkl คืออะไรไม่ต้องออกจากแถวบ้าน สำหรับปุ่มลูกศรมือต้องเลื่อนผ่านแป้นพิมพ์
k0pernikus

1
@Carpetsmoker แน่นอนฉันรู้สึกดีขึ้น ;)
k0pernikus

คำตอบ:


24

คุณสามารถติดตั้งปลั๊กอิน hardmodeและ.vimrcใส่ไว้ใน

let g:HardMode_level = 'wannabe'
let g:HardMode_hardmodeMsg = 'Don''t use this!'
autocmd VimEnter,BufNewFile,BufReadPost * silent! call HardMode()

หากคุณไม่ต้องการที่จะใช้ปลั๊กอินใช้ (ซึ่งอาจจะเป็นทางเลือกที่ดีกว่าที่คุณได้รับการปรับแต่งทุกอย่างที่ตัวเอง!) nnoremap, vnoremapและinoremapบน<Left>, <Right>, <Up>, <Down>, <PageUp>และ<PageDown>ตัวอย่างเช่น:

nnoremap <Left> :echo "No left for you!"<CR>
vnoremap <Left> :<C-u>echo "No left for you!"<CR>
inoremap <Left> <C-o>:echo "No left for you!"<CR>

1
นอกจากนี้ยังมีถ้าคุณต้องการที่จะปิดการใช้งานรูปแบบแป้นทั้งหมด:<nop> nnoremap h <nop>
akshay

25

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

noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>

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

หัวข้อที่ได้รับความนิยมอย่างสูงนี้เกี่ยวข้องกับความแตกต่างระหว่าง noremap, nnoremap, inoremap ฯลฯ : Remapping in Vim

แนวคิดทั่วไปที่มีการแมปใหม่เป็นดังนี้:

Choice-of-mode-to-remap <remap this command> <to this action/command instead>

ดังนั้นในตัวอย่างอื่น ๆ ที่ให้คุณทำการแมปคำสั่งซ้ายของคุณไปยังพรอมต์ข้อความซึ่งเป็นการลบการกระทำของการย้ายเคอร์เซอร์โดยไม่ตั้งใจ ตัวอย่างที่ฉันให้ไว้ข้างต้นเป็นเพียง remaps การกระทำที่ทำเพื่ออะไรมากกว่าสิ่งอื่น พิจารณาว่าเป็นการลบ, แทนที่การแทนที่, ฟังก์ชั่นเป็นกลุ่ม


2

คุณสามารถเพิ่มสิ่งนี้ลงในของคุณ.vimrcเพื่อปิดใช้งานปุ่มลูกศรใน Command, Insert, Normal และ Visual Mode:

" Remove newbie crutches in Command Mode
cnoremap <Down> <Nop>
cnoremap <Left> <Nop>
cnoremap <Right> <Nop>
cnoremap <Up> <Nop>

" Remove newbie crutches in Insert Mode
inoremap <Down> <Nop>
inoremap <Left> <Nop>
inoremap <Right> <Nop>
inoremap <Up> <Nop>

" Remove newbie crutches in Normal Mode
nnoremap <Down> <Nop>
nnoremap <Left> <Nop>
nnoremap <Right> <Nop>
nnoremap <Up> <Nop>

" Remove newbie crutches in Visual Mode
vnoremap <Down> <Nop>
vnoremap <Left> <Nop>
vnoremap <Right> <Nop>
vnoremap <Up> <Nop>

หมายเหตุ:ชำระเงิน:help map-overviewสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการทำแผนที่ประเภทต่างๆ


1
คุณสามารถลดจำนวนคำสั่งที่จำเป็นโดยใช้noremap ... ...(สำหรับโหมดปกติ, ภาพ, เลือกและรอดำเนินการ) และnoremap! ... ...(สำหรับโหมดแทรกและบรรทัดคำสั่ง)
JürgenKrämer

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