Vim HardMode Fine Grain Movements


11

Niedawno dowiedziałem się o trybie twardym Vima i postanowiłem go użyć. Mam jednak problemy z drobnymi ruchami ziarna.

Na przykład, powiedzmy, że naprawdę chcę po prostu przejść w górę lub w dół o jedną linię. Ponieważ ji ksą wyłączone, nie jestem pewien, jakie są lepsze alternatywy dla tego.

Napotkałem ten sam problem, gdy chcę przesunąć jedną lub dwie postacie w prawo lub w lewo. Czy ktoś wie, jak zastąpić tego rodzaju ruchy?

To jest wtyczka, której używam: https://github.com/wikitopian/hardmode .


Co za głupia wtyczka! Używaj cokolwiek działa.
romainl

Naprawdę zgadzam się z romainl: dobrze jest nauczyć się efektywnie nawigować w pliku, ale narzucenie sobie tego rodzaju wtyczki nie jest koniecznym bólem. Nadal możesz być zainteresowany moją odpowiedzią tutaj (a dokładniej część o /i ?.
statox

1
Z szacunkiem nie zgodziłbym się tutaj ze statoxem i romainlem. Bezpośrednie przejście do celów, które chcesz zmienić, może znacznie poprawić ogólną wydajność. Chociaż tak, może to początkowo spowolnić, W dłuższej perspektywie nadrobisz stracony czas dzięki lepszej nawigacji.
Archanioł33

Właściwie @ Archangel33 Myślę, że podzielamy tę samą opinię na temat tego, że nawigacja bardziej precyzyjnie innymi metodami niż hjkljest dobra. To, co odrzuciłem, to sama wtyczka: Moim zdaniem lepiej jest uczyć się nowych sposobów nawigacji od razu (nie możesz nauczyć się wszystkich z nich jednocześnie), a podczas uczenia się przy użyciu wtyczek, które Cię frustrują, nie jest niezbędny. Biorąc to pod uwagę, to tylko moja opinia: ma się prawo nie zgodzić się :-)
statox

1
@Alex Rzeczywiście mój komentarz był tylko moją osobistą opinią, nigdy nie pomyślałbym, że mam jedyne i uniwersalne rozwiązanie, dlatego moje ostatnie zdanie było That being said it is only my opinion: one has right to disagree. Teraz debata jest potencjalnie nieskończona: oczywiście niektórzy ludzie skorzystają z tego rodzaju wtyczek, podczas gdy inni tylko sfrustrują innych i zaszkodzą ich nauce. Jeśli chcesz o tym porozmawiać, chętnie z tobą porozmawiamy na czacie, ale nie powinniśmy spamować komentarzy do pytania podczas tego rodzaju debaty :-)
statox

Odpowiedzi:


17

To tylko niektóre z ruchów, które jest w stanie wykonać vim, na razie powinny cię zabrać.

TL; DR

  1. Użyj wbudowanej funkcji pomocy Vima na navigationlub jeszcze lepiejusr_03.txt
  2. Szukaj w Google dla vim advanced movements
  3. Nawiguj za pomocą / do słów
  4. idź tutaj Wszystkie właściwe ruchy

Ruchy

Istnieje wiele sposobów poruszania się w vimie. Wymieniłem niektóre, które znalazłem, szukając vim advanced movements, i kilka, których używam przez cały czas. Jestem pewien, że znasz większość z nich, ale myślę, że te, na które chcesz zwrócić szczególną uwagę, to słowo nawigacja.

Oto kilka, które pozwalają na nawigację wewnątrz linii.

  • 0 - przejdź do początku bieżącej linii.
  • ^ - przejdź do pierwszego niepustego znaku linii.
  • $ - przejdź na koniec bieżącej linii.
  • g_ - przejdź do ostatniego niepustego znaku linii.

Nawigacja za pomocą słów może być bardzo pomocna. Aby być bardziej szczegółowym, należy nawigować w odniesieniu do słów, używając:

  • e - przejdź do końca bieżącego słowa.
  • E - przejdź do końca bieżącego WORD.
  • b - przejdź do poprzedniego (przed) słowa.
  • B - przejdź do poprzedniego (przed) WORD.
  • w - przejdź do następnego słowa.
  • W - przejdź do następnego WORD.

Słowo składa się z sekwencji liter, cyfr i znaków podkreślenia. SŁOWO składa się z sekwencji niepustych znaków, oddzielonych białą spacją. słowa | SŁOWA mogą się również zmieniać w zależności od ustawień vima.

Przykład pokazujący różnicę między WORD a słowem

192.168.1.1 to jedno SŁOWO.

192.168.1.1 jest siedem słów.

Ruchy wyszukiwania mogą być również bardzo przydatne.

  • /pattern - Wyszukaj wzór, który zabierze Cię do następnego wystąpienia pattern
    • nzabierze Cię do następnego dopasowania patternponiżej kursora.
  • ?pattern- Wyszukaj wzór, który zabierze Cię do poprzedniego wystąpienia pattern.
    • Nzabierze Cię do następnego dopasowania patternpowyżej kursora.
  • * - Przejdź do następnego wystąpienia bieżącego słowa pod kursorem.
  • # - Przejdź do poprzedniego wystąpienia bieżącego słowa pod kursorem.
  • % - Przejdź do pasujących nawiasów klamrowych lub nawiasów wewnątrz kodu.

Oto kilka czynności, które możesz zrobić jeszcze przed otwarciem vima, z wiersza poleceń Vim +N filenamepozwala przejść do N-tej linii pliku po jego otwarciu.

vim +10 /etc/passwd

Vim +/pattern filenameotwiera plik do pierwszego wiersza z pojawieniem się pattern. W poniższym przykładzie vim otworzy plik README i przejdzie do pierwszego wystąpienia słowa „install”.

vim +/install README

Vim +?patten filenameotwiera plik do ostatniego wystąpienia pattern. W poniższym przykładzie otworzy plik README i przejdzie do ostatniego wystąpienia słowa „błąd”.

vim +?bug README


8

Jako alternatywę dla hardmode następujący fragment pozwoli Ci używać h, j, k, i l, jak zwykle, ale wytwarzają sygnał dźwiękowy ostrzegający Cię, gdy są używane w krótkim odstępie czasu.

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>

Aby poznać inne podejście do ograniczania hjklużycia, patrz vim-melasa .


3

Alternatywnie skorzystaj z trybu średniego, który wciąż próbuje nauczyć cię „właściwych ruchów”, ale jest mniej rygorystyczny:

Tryb średni to wtyczka Vima, która ogranicza charakterystyczne ruchy, ale nie wyłącza ich całkowicie. Domyślnie tryb średni zezwala tylko na dwa kolejne ruchy znakowe.


1

Miałem ten sam problem, potem napisałem :help hardmodeLo i oto znalazłem

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

Nawiasem mówiąc, jestem jednym z początkujących vimów, którzy uważali tę wtyczkę za niezwykle pomocną, ponieważ naprawdę odepchnęła mnie od myszy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.