Vim HardMode Feinkornbewegungen

11

Ich habe kürzlich etwas über den Vim-Hard-Modus erfahren und mich entschlossen, ihn zu verwenden. Ich habe jedoch einige Probleme mit feinkörnigen Bewegungen.

Nehmen wir zum Beispiel an, ich möchte wirklich nur eine Zeile nach oben oder unten gehen. Da jund kdeaktiviert sind, bin ich mir nicht sicher, welche besseren Alternativen es dafür gibt.

Ich bin auf dasselbe Problem gestoßen, wenn ich ein oder zwei Zeichen nach rechts oder links verschieben möchte. Weiß jemand, wie man diese Art von Bewegungen ersetzen würde?

Dies ist das Plugin, das ich verwende: https://github.com/wikitopian/hardmode .

Phaino
quelle
Was für ein dummes Plugin! Verwenden Sie, was auch immer funktioniert.
Romainl
Ich stimme romainl wirklich zu: Es ist gut zu lernen, wie man effizient in einer Datei navigiert, aber sich diese Art von Plugin aufzuzwingen, ist kein notwendiger Schmerz. Trotzdem könnte Sie meine Antwort hier interessieren (genauer gesagt der Teil über /und ?.
statox
1
Ich würde Statox und Romainl hier respektvoll widersprechen. Wenn Sie direkt zu den Zielen navigieren, die Sie ändern möchten, können Sie Ihre Gesamteffizienz erheblich verbessern. Ja, dies kann Sie zunächst verlangsamen. Auf lange Sicht werden Sie die verlorene Zeit durch bessere Navigation wieder wettmachen.
Erzengel33
Eigentlich @ Archangel33 Ich denke, wir teilen die gleiche Meinung über die Tatsache, dass eine genauere Navigation mit anderen Methoden als hjkleine gute Sache ist. Was ich missbilligte, war das Plugin selbst: Meiner Meinung nach ist es besser, einmal neue Navigationsmethoden zu lernen (Sie können nicht alle gleichzeitig lernen) und während des Lernens Plugins zu verwenden, was Sie nicht frustriert notwendig.
Davon abgesehen
1
@Alex In der Tat war mein Kommentar nur meine persönliche Meinung, ich würde niemals in Betracht ziehen, dass ich die einzige und universelle Lösung habe, deshalb war mein letzter Satz That being said it is only my opinion: one has right to disagree. Jetzt ist die Debatte möglicherweise endlos: Natürlich werden einige Leute von dieser Art von Plugin profitieren, während es nur andere frustrieren und ihr Lernen schädigen wird. Wenn Sie darüber sprechen
möchten,

Antworten:

17

Dies sind nur einige der Bewegungen, zu denen vim in der Lage ist. Diese sollten Sie vorerst in Schwung bringen.

TL; DR

  1. Verwenden Sie die integrierte Hilfefunktion von Vim für navigationoder noch besserusr_03.txt
  2. Suchen Sie bei Google nach vim advanced movements
  3. Navigieren Sie mit / zu Wörtern
  4. geh hierher Alles in Ordnung

Bewegungen

Es gibt viele Möglichkeiten, sich in vim fortzubewegen. Ich habe einige aufgelistet, die ich bei der Suche gefunden habe vim advanced movements, und einige, die ich ständig benutze. Ich bin mir sicher, dass Sie die meisten davon kennen, aber diejenigen, von denen ich denke, dass Sie auch besonders darauf achten möchten, sind die Wortnavigation.

Hier sind einige, die die Navigation innerhalb einer Linie ermöglichen.

  • 0 - Gehen Sie zum Anfang der aktuellen Zeile.
  • ^ - Gehen Sie zum ersten nicht leeren Zeichen der Zeile.
  • $ - Gehen Sie zum Ende der aktuellen Zeile.
  • g_ - Gehen Sie zum letzten nicht leeren Zeichen der Zeile.

Die Navigation mit Wörtern kann sehr hilfreich sein. Um genauer zu sein, sollten Sie in Bezug auf Wörter navigieren und Folgendes verwenden:

  • e - Gehen Sie zum Ende des aktuellen Wortes.
  • E - gehe zum Ende des aktuellen WORTES.
  • b - gehe zum vorherigen (vorherigen) Wort.
  • B - gehe zum vorherigen (vor) WORT.
  • w - gehe zum nächsten Wort.
  • W - gehe zum nächsten WORT.

Ein Wort besteht aus einer Folge von Buchstaben, Ziffern und Unterstrichen. Ein WORT besteht aus einer Folge von nicht leeren Zeichen, die durch Leerzeichen getrennt sind. Die Wörter | WORTE können sich auch abhängig von Ihren vim-Einstellungen ändern.

Beispiel, um den Unterschied zwischen WORT und Wort zu zeigen

192.168.1.1 ist ein einzelnes Wort.

192.168.1.1 ist sieben Wörter.

Die Suchbewegungen können auch äußerst nützlich sein.

  • /pattern - Suchen Sie nach einem Muster, mit dem Sie zum nächsten Auftreten von gelangen pattern
    • nbringt Sie zur nächsten Übereinstimmung patternunter dem Cursor.
  • ?pattern- Suchen Sie nach einem Muster, mit dem Sie zum vorherigen Vorkommen von gelangen pattern.
    • Nbringt Sie zur nächsten Übereinstimmung patternüber dem Cursor.
  • * - Gehen Sie zum nächsten Vorkommen des aktuellen Wortes unter dem Cursor.
  • # - Gehen Sie zum vorherigen Vorkommen des aktuellen Wortes unter dem Cursor.
  • % - Gehen Sie zu den passenden Klammern oder Klammern im Code.

Hier sind einige, die Sie noch vor dem Öffnen von vim ausführen können. Über die Befehlszeile Vim +N filenamekönnen Sie nach dem Öffnen zur n-ten Zeile der Datei wechseln.

vim +10 /etc/passwd

Vim +/pattern filenameöffnet die Datei in der ersten Zeile mit dem Auftreten des pattern. Im folgenden Beispiel öffnet vim die README-Datei und springt zum ersten Vorkommen des Wortes "install".

vim +/install README

Vim +?patten filenameöffnet die Datei bis zum letzten Auftreten von pattern. Im folgenden Beispiel wird die README-Datei geöffnet und zum letzten Vorkommen des Wortes "Fehler" gesprungen.

vim +?bug README

Erzengel33
quelle
8

Als Alternative zu Hardmode, ermöglicht es der folgende Code - Schnipsel Sie zu verwenden h, j, k, und lals normal , aber ein akustisches Signal erzeugen Sie zu warnen , wenn sie in schnellen Folge verwendet werden.

function! s:BeepOnRepeat(key)
    let count1 = v:count1

    if !exists('s:last_time')
        let s:last_time    = reltime()
        let s:repeat_count = 1
    else
        " increment the repeat count if `h`, `j`, `k`, or `l` was pressed
        " within the last second, otherwise reset it
        let now = reltime()
        if str2float(reltimestr(reltime(s:last_time, now))) < 1
            let s:repeat_count += 1
        else
            let s:repeat_count = 1
        endif
        let s:last_time = now

        " produce an audible beep if a sequence of `h`, `j`, `k`, and/or `l`,
        " greater than three, was pressed (within the repeat count time limit)
        if s:repeat_count > 3
            let savebelloff    = &belloff
            let savevisualbell = &visualbell
            let &belloff    = ''
            let &visualbell = 0
            execute "normal! \<Esc>"
            let &belloff    = savebelloff
            let &visualbell = savevisualbell
        endif
    endif

    execute 'normal! ' . count1 . a:key
endfunction

nnoremap <silent> h :<C-u>call <SID>BeepOnRepeat('h')<CR>
nnoremap <silent> j :<C-u>call <SID>BeepOnRepeat('j')<CR>
nnoremap <silent> k :<C-u>call <SID>BeepOnRepeat('k')<CR>
nnoremap <silent> l :<C-u>call <SID>BeepOnRepeat('l')<CR>

Einen anderen Ansatz zur Einschränkung der hjklVerwendung finden Sie unter Vim-Melasse .

djjcast
quelle
3

Alternativ können Sie den Mittelmodus verwenden, der immer noch versucht, Ihnen "richtige Bewegungen" beizubringen, dies jedoch weniger streng ist:

Der mittlere Modus ist ein Vim-Plugin, das die Bewegungen der Charaktere einschränkt, sie jedoch nicht vollständig deaktiviert. Standardmäßig erlaubt der mittlere Modus nur zwei aufeinanderfolgende zeichenweise Bewegungen.

luka5z
quelle
1

Ich hatte das gleiche Problem, dann tippte ich :help hardmodeLo und siehe da, ich fand

'g:HardMode_level' If set to 'wannabe' 
arrow keys disabled, but not   hjkl etc.                                                                                              

Übrigens bin ich einer der vim-Anfänger, die dieses Plugin als äußerst hilfreich empfanden, da es mich wirklich von der Maus weggedrückt hat.

ewianda
quelle