Vim HardMode Мелкозернистые движения

11

Недавно я узнал о жестком режиме Vim и решил попробовать его. Тем не менее, я сталкиваюсь с некоторыми проблемами с мелкими движениями зерна.

Например, скажем, я действительно хочу двигаться вверх или вниз на одну строку. Так как jи kотключены, я не уверен, что есть лучшие альтернативы для этого.

Я столкнулся с той же проблемой, когда хочу переместить один или два символа вправо или влево. Кто-нибудь знает, как можно заменить эти типы движений?

Это плагин, который я использую: https://github.com/wikitopian/hardmode .

Phaino
источник
Какой глупый плагин! Используйте все, что работает.
Ромен
Я действительно согласен с romainl: хорошо узнать, как эффективно перемещаться по файлу, но навязывание себе такого плагина не является необходимой болью. Тем не менее, вас может заинтересовать мой ответ здесь (точнее, часть про /и ?.
statox
1
Я бы с уважением не согласился бы с statox и romainl здесь. Переход непосредственно к целям, которые вы хотите изменить, может значительно повысить общую эффективность. Хотя вначале это может замедлить вас, в конечном итоге вы наверстаете упущенное, используя более совершенную навигацию.
Архангельский
На самом деле @ Archangel33 Я думаю, что мы разделяем одно и то же мнение о том, что навигация более точна с помощью других методов, чем hjklэто хорошо. Что я не одобряю, так это сам плагин: по моему мнению, лучше изучать новые способы навигации один раз (вы не можете выучить все их одновременно), а во время обучения использовать плагины, которые вас расстраивают. необходимо. Это сказанное, это - только мое мнение: каждый имеет право не согласиться :-)
statox
1
@ Алекс Действительно, мой комментарий был только моим личным мнением, я бы никогда не подумал, что у меня есть единственное и универсальное решение, поэтому последнее предложение было моим That being said it is only my opinion: one has right to disagree. Теперь, дебаты потенциально бесконечны: конечно, некоторые люди извлекут выгоду из этого вида плагина, тогда как он только расстроит некоторых других и повредит их обучению. Если вы хотите поговорить об этом, я с удовольствием обсудим с вами в чате, но мы не должны спамить комментарии к вопросу с такими дебатами :-)
statox

Ответы:

17

Это лишь некоторые из тех движений, на которые способен vim, они должны помочь вам в этом.

TL; DR

  1. Используйте встроенную справочную функцию Vim navigationили еще лучшеusr_03.txt
  2. Поиск в Google для vim advanced movements
  3. Навигация с помощью / к словам
  4. иди сюда все правильные ходы

движения

В vim есть много способов обойти, я перечислил некоторые из них, которые я нашел vim advanced movements, и некоторые из них я использую все время. Я уверен, что вы знаете о большинстве из них, но я думаю, что вам тоже стоит обратить особое внимание на слово навигация.

Вот некоторые из них, которые позволяют для навигации внутри линии.

  • 0 - перейти к началу текущей строки.
  • ^ - перейти к первому непустому символу строки.
  • $ - перейти в конец текущей строки.
  • g_ - перейти к последнему непустому символу строки.

Навигация со словами может быть очень полезна. Чтобы быть более детализированным, вы должны ориентироваться по отношению к словам, используя:

  • e - перейти к концу текущего слова.
  • E - перейти к концу текущего WORD.
  • b - перейти к предыдущему (до) слову.
  • B - перейти к предыдущему (перед) СЛОВУ.
  • w - перейти к следующему слову.
  • W - перейти к следующему СЛОВУ.

Слово состоит из последовательности букв, цифр и подчеркиваний. СЛОВО состоит из последовательности непустых символов, разделенных пробелом. Слова | СЛОВА также могут меняться в зависимости от настроек Vim.

Пример, чтобы показать различие между словом и словом

192.168.1.1 это одно слово.

192.168.1.1 это семь слов.

Поисковые движения тоже могут быть чрезвычайно полезными.

  • /pattern - Поиск шаблона, который приведет вас к следующему появлению pattern
    • nприведет вас к следующему совпадению patternпод курсором.
  • ?pattern- Поиск шаблона, который приведет вас к предыдущему появлению pattern.
    • Nприведет вас к следующему матчу patternнад курсором.
  • * - Перейти к следующему вхождению текущего слова под курсором.
  • # - Перейти к предыдущему появлению текущего слова под курсором.
  • % - Перейти к фигурной согласующих, или круглые скобки внутри кода.

Вот некоторые из них, которые вы можете сделать даже до того, как откроете vim, из командной строки Vim +N filenameвы сможете перейти к N-й строке файла после его открытия.

vim +10 /etc/passwd

Vim +/pattern filenameоткрывает файл на первую линию с наступлением pattern. В следующем примере vim откроет файл README и перейдет к первому появлению слова «установить».

vim +/install README

Vim +?patten filenameоткрывает файл до последнего появления pattern. В следующем примере он откроет файл README и перейдет к последнему появлению слова «ошибка».

vim +?bug README

Archangel33
источник
8

В качестве альтернативы hardmode, следующий фрагмент кода позволит вам использовать h, j, kи , lкак обычно , но производят звуковой сигнал , чтобы предупредить вас , когда они используются в быстрой последовательности.

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>

Для другого подхода к ограничению hjklиспользования см. Vim-патоку .

djjcast
источник
3

В качестве альтернативы используйте средний режим, который все еще пытается выучить «правильные ходы», но менее строг в этом:

Средний режим - это плагин Vim, который ограничивает движения персонажа, но не отключает их полностью. По умолчанию средний режим допускает только два последовательных символьных движения.

luka5z
источник
1

У меня была такая же проблема, тогда я набрал :help hardmodeЛо, и вот я нашел

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

Кстати, я один из новичков в vim, который нашел этот плагин чрезвычайно полезным, так как он действительно оттолкнул меня от мыши.

ewianda
источник