Wie deaktiviere ich Pfeiltasten in vim?

24

Ich möchte mir das Verwenden von hjkl mehr beibringen als das Verwenden der Pfeiltasten, um in der Startreihe zu bleiben. Und ja, mir ist sehr bewusst, dass man hjkl nicht als Hauptnavigationstasten verwenden sollte. Dennoch sind meine Gewohnheiten ziemlich stark und ich merke nicht einmal, dass diese Handbewegung zu den Pfeiltasten geführt hat und ich möchte es verlernen.

Um diese Gewohnheit zu brechen: Wie kann ich die Pfeiltasten deaktivieren, damit ich gezwungen bin, das hjkl oder eine andere Navigationsmethode zu verwenden?

Als Bonus wäre es hilfreich, wenn noch eine Meldung angezeigt würde, Dont't use this!dass dies nicht obligatorisch ist. Wenn sie nicht funktionieren, ist es für mich verwirrend genug, meine Gewohnheiten zu überdenken.

k0pernikus
quelle
4
Das macht absolut keinen Sinn. HJKL saugen genauso viel wie die Pfeile.
Romainl
6
Ich denke, @romainl könnte darauf hinweisen, dass es wichtiger ist, sich auf die kraftvollen Bewegungen von vim zu konzentrieren (wie wfür das nächste Wort, }für den nächsten Absatz, nfür das nächste Suchergebnis, fzfür das nächste Auftreten zin der aktuellen Zeile usw.), als mehr zu bewegen granular nach einzelnen Zeichen. Dem stimme ich definitiv zu. HJKL ist jedoch definitiv besser als die Pfeiltasten, da Sie Ihre Hände nicht aus der Startreihe bewegen müssen. Ich tippe häufig so etwas wie jA, das viel schneller ist als <Down>Aund von keiner Bewegung wirklich geschlagen werden kann.
wchargin
4
@romainl: Ich denke, ich hatte diese Diskussion mit Ihnen vor. Nicht-Vimmer sind an Pfeile gewöhnt und nicht an HJKL. Idealerweise möchten Sie auch nicht verwenden. Das Blockieren von Pfeilen (und nicht von HJKL) lässt die Leute innehalten und darüber nachdenken, was sie tun (während HJKL weiterhin als Alternative offen bleibt, falls dies tatsächlich die beste Option ist oder falls der Benutzer ratlos ist, wie dies zu tun ist stärkere Bewegungen.). Dh es geht nicht darum, HJKL zu lernen, es geht darum, den in anderen Editoren erlernten Automatismus zu blockieren.
Amadan,
1
@Carpetsmoker Was definitiv ein Vorteil der hjkl-Tasten ist, ist, dass Sie die Startreihe nicht verlassen müssen. Für die Pfeiltasten muss sich die Hand über die Tastatur bewegen.
k0pernikus
1
@Carpetsmoker Es fühlt sich für mich sicher besser an. ;)
k0pernikus

Antworten:

24

Sie können das Hardmode-Plugin installieren und in Ihr .vimrcPut-In einfügen

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

Wenn Sie nicht möchten , dass ein Plugin verwenden, verwenden Sie (die eine bessere Wahl sein kann, wie man alles selbst anpassen bekommen!) nnoremap, vnoremapUnd inoremapauf <Left>, <Right>, <Up>, <Down>, <PageUp>und <PageDown>, zum Beispiel:

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>
Amadan
quelle
1
Es gibt auch , <nop>wenn Sie die keymap ganz deaktivieren wollen: nnoremap h <nop>.
Akshay
25

Wenn Sie oder eine andere Person, die dieses Thema liest, nur die Tastenbewegungen deaktivieren möchten, ohne dass die Textwarnung angezeigt wird, geben Sie die folgenden Zeilen in .vimrc ein

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

Die Befehle deaktivieren die Tastenbewegung nur im normalen Modus. Sie arbeiten immer noch im Einfügemodus. Wenn Sie inoremap verwenden, wird die Pfeilbewegung auch aus dem Einfügemodus entfernt.

Dieses sehr beliebte Thema befasst sich mit den Unterschieden zwischen Noremap, Noremap, Inoremap usw.: Remapping in Vim

Die allgemeine Idee beim Remapping lautet wie folgt:

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

In den anderen Beispielen ordnen Sie Ihren linken Befehl einer Eingabeaufforderung zu, die im Übrigen die Aktion des tatsächlichen Bewegens des Cursors aufhebt. Das Beispiel, das ich oben gegeben habe, ordnet die Aktionen einfach eher nichts als etwas anderem zu. Ziehen Sie in Betracht, die vim-Funktionalität zu entfernen, anstatt sie zu ersetzen.

Beyer
quelle
2

Sie können dies hinzufügen .vimrc, um die Pfeiltasten im Befehls-, Einfüge-, Normal- und visuellen Modus zu deaktivieren:

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

Hinweis: Zur Kasse gehen, :help map-overviewum weitere Informationen zu den verschiedenen Mapping-Arten zu erhalten

NichtlinearFruit
quelle
1
Sie können die Anzahl der erforderlichen Befehle reduzieren, indem Sie noremap ... ...(für den normalen, visuellen, Auswahl- und Operator-ausstehenden Modus) und noremap! ... ...(für den Einfüge- und Befehlszeilenmodus) verwenden.
Jürgen Krämer
Wahr. Ich dachte, die explizitere noremapswäre hilfreich für jemanden, der anpassen möchte, welche Modi betroffen sind
NonlinearFruit