Vim'deki ok tuşları nasıl devre dışı bırakılır?


24

Kendimi hjkl kullanarak ok tuşlarını kullanmaktan daha çok ana sayfada kalmak için kullanmak istiyorum. Ve evet, hjkl'yi ana gezinme tuşları olarak kullanmamamız gerektiğinin farkındayım. Oysa ki alışkanlığım oldukça güçlü ve bu el hareketini ok tuşlarına yaptığımı bile anlamadım ve öğrenmek istiyorum.

Bu alışkanlığı kırmak için: hjkl veya başka bir gezinme yöntemini kullanmaya zorlanmak için ok tuşlarını nasıl devre dışı bırakabilirim?

Bir bonus olarak, Dont't use this!zorunlu olmadığına dair henüz bir mesaj gösterilmemesi yararlı olacaktır . Eğer işe yaramazlarsa, alışkanlıklarımı yeniden düşünmem benim için yeterince kafa karıştırıcı olacaktır.


4
Bunu yapmanın hiçbir anlamı yoktur; HJKL oklar kadar emer.
romainl

6
@Romainl, vim'in güçlü hareketlerini (bir wsonraki kelime }için, bir sonraki paragraf niçin, bir sonraki arama sonucu eşleşmesi fziçin z, geçerli satırda bir sonraki tekrarlama için , vb.) Kullanmaya odaklanmanın daha fazla harekete geçmenin daha önemli olduğunu düşünüyor olabilir . tek tek karakterlerle ayrıntılı olarak. Buna kesinlikle katılıyorum. Ancak, HJKL, ellerinizi ana satırdan çekmeniz gerekmediği için ok tuşlarından kesinlikle daha iyidir. Sık sık jA, daha hızlı olan <Down>Ave hiçbir hareketle yenilemeyecek gibi bir şey yazacağım .
wchargin

4
@romainl: Sanırım bu tartışmayı daha önce de yaptım. Vimerler olmayan oklar için kullanılır ve HJKL için kullanılmaz. İdeal olarak, ikisini de kullanmak istemezsiniz; ancak okları engelleme (HJKL değil), insanların ne yaptıklarını duraklatmasına ve yansıtmalarına neden olur (HJKL'yi gerçekten en iyi seçenek olması durumunda veya kullanıcının nasıl yapılacağına karar vermesi durumunda alternatif olarak açık bırakırken) daha güçlü hareketler. Yani, HJKL'yi öğrenmekle ilgili değil, diğer editörlerde öğrenilen otomatizmi engellemekle ilgili.
Amadan

1
@Carpetsmoker Kesinlikle hjkl tuşlarının tersi olan şey evden ayrılmak zorunda değil. Ok tuşlarında el, klavyede hareket etmek zorundadır.
k0pernikus

1
@Carpetsmoker Kesinlikle benim için daha iyi hissettiriyor. ;)
k0pernikus

Yanıtlar:


24

Sen yükleyebilir eklentisi hardmode ve içinde .vimrcde put

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

Eğer bir eklenti kullanmak istemiyorsanız, kullanım (her şeyi kendiniz özelleştirmek için olsun, daha iyi bir seçim olabilir!) nnoremap, vnoremapVe inoremapüzerinde <Left>, <Right>, <Up>, <Down>, <PageUp>ve <PageDown>, örneğin:

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
Orada da <nop>tümüyle klavye düzeni devre dışı bırakmak istiyorsanız: nnoremap h <nop>.
akshay

25

Siz veya bu konuyu okuyan bir başkası, sadece metin uyarısı .vimrc içine aşağıdaki satırları girmeden tuş hareketlerini devre dışı bırakmak istiyorsa

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

Komutlar yalnızca normal modda tuş hareketini devre dışı bırakacaktır. Hala ekleme modunda çalışıyorlar. Inoremap kullanıyorsanız, ok hareketi ekleme modundan da kaldırılır.

Bu çok popüler olan konu, noremap, nnoremap, inoremap vs arasındaki farkları ele alıyor: Vim'de Remapping

Remapping ile genel fikir şöyle gider:

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

Böylece verilen diğer örneklerde, sol komutunuzu, imleci hareket ettirme eylemini yanlışlıkla kaldıran bir metin istemine yeniden eşlersiniz. Yukarıda verdiğim örnek, eylemlerin başka hiçbir şeyden ziyade hiçbir şey yapmamasını sağlar. Vim işlevselliğini değiştirmek yerine, kaldırmayı düşünün.


2

Bunu .vimrc, Komut, Ekle, Normal ve Görsel Mod'da ok tuşlarını devre dışı bırakmak için kendinize ekleyebilirsiniz :

" 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>

Not: Ödeme :help map-overviewharitalama farklı türleri hakkında daha fazla ayrıntı için


1
noremap ... ...(Normal, görsel, seçili ve operatör beklemede modu için) ve noremap! ... ...(ekleme ve komut satırı modu için) kullanarak gerekli komut sayısını azaltabilirsiniz .
Jürgen Krämer

Doğru. Daha açık noremapsolanın hangi modların etkileneceğini özelleştirmek isteyen biri için yararlı olacağını düşündüm
NonlinearFruit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.