Movimentos de grão fino Vim HardMode

11

Recentemente, descobri o modo difícil do Vim e decidi tentar usá-lo. No entanto, estou tendo alguns problemas com movimentos de grãos finos.

Por exemplo, digamos que eu realmente só queira subir ou descer uma linha. Desde je kestá desativado, não tenho certeza de quais são as melhores alternativas para isso.

Eu encontrei o mesmo problema quando quero mover um ou dois caracteres para a direita ou esquerda. Alguém sabe como alguém substituiria esse tipo de movimento?

Este é o plugin que estou usando: https://github.com/wikitopian/hardmode .

Phaino
fonte
Que plugin estúpido! Use o que funcionar.
Romainl
Eu realmente concordo com o romainl: é bom aprender a navegar com eficiência em um arquivo, mas impor a si mesmo esse tipo de plug-in é uma dor desnecessária. Ainda que você poderia estar interessado na minha resposta aqui (mais precisamente a parte sobre /e ?.
statox
1
Eu respeitosamente discordo de statox e romainl aqui. Navegar diretamente para os destinos que você deseja alterar pode melhorar bastante sua eficiência geral. Embora sim, isso pode atrasá-lo no início, a longo prazo, você compensará o tempo perdido usando melhores navegações.
Archangel33
Na verdade, @ Archangel33, acho que compartilhamos a mesma opinião sobre o fato de navegar mais precisamente com outros métodos do que hjklé uma coisa boa. O que eu estava reprovando foi o próprio plug-in: na minha opinião, é melhor aprender novas maneiras de navegar uma vez por vez (você não pode aprender todas elas ao mesmo tempo) e durante o aprendizado usando plug-ins que o frustram. necessário. Dito isto, é apenas a minha opinião: a pessoa tem direito de discordar :-)
statox
1
@ Alex De fato, meu comentário foi apenas minha opinião pessoal, eu nunca consideraria que tenho a única solução universal e é por isso que minha última frase foi That being said it is only my opinion: one has right to disagree. Agora, o debate é potencialmente interminável: é claro que algumas pessoas se beneficiarão desse tipo de plug-in, enquanto isso apenas frustrará outros e prejudicará seu aprendizado. Se você gostaria de falar sobre isso, eu vou com prazer discutir com você em uma conversa, mas não devemos spam nos comentários da pergunta com este tipo de debate :-)
statox

Respostas:

17

Estes são apenas alguns dos movimentos que o vim é capaz, esses devem fazer por agora.

TL; DR

  1. Use o recurso de ajuda embutido do Vim no navigationou melhor aindausr_03.txt
  2. Pesquise no google por vim advanced movements
  3. Navegue com / para palavras
  4. vá aqui Todos os movimentos certos

Movimentos

Existem várias maneiras de contornar o vim. Listei algumas que encontrei pesquisando vim advanced movementse outras que uso o tempo todo. Tenho certeza de que você conhece a maioria delas, mas acho que você também precisará prestar atenção especial à palavra navegação.

Aqui estão alguns que permitem a navegação dentro de uma linha.

  • 0 - vá para o início da linha atual.
  • ^ - vá para o primeiro caractere não em branco da linha.
  • $ - vá para o final da linha atual.
  • g_ - vá para o último caractere não em branco da linha.

A navegação com palavras pode ser muito útil. Para ser mais granular, você deve navegar em relação às palavras, usando:

  • e - vá para o final da palavra atual.
  • E - vá para o final da PALAVRA atual.
  • b - vá para a palavra anterior (antes).
  • B - vá para a PALAVRA anterior (antes).
  • w - vá para a próxima palavra.
  • W - vá para a próxima PALAVRA.

Uma palavra consiste em uma sequência de letras, dígitos e sublinhados. Uma PALAVRA consiste em uma sequência de caracteres não em branco, separados por espaço em branco. palavras | PALAVRAS também podem mudar dependendo das configurações do vim.

Exemplo para mostrar a diferença entre WORD e word

192.168.1.1 é uma palavra única.

192.168.1.1 são sete palavras.

Os movimentos de busca também podem ser extremamente úteis.

  • /pattern - Procure um padrão que o levará para a próxima ocorrência de pattern
    • nlevará você para a próxima partida patternabaixo do cursor.
  • ?pattern- Procure um padrão que o leve à ocorrência anterior de pattern.
    • Nlevará você para a próxima partida patternacima do cursor.
  • * - Vá para a próxima ocorrência da palavra atual abaixo do cursor.
  • # - Vá para a ocorrência anterior da palavra atual sob o cursor.
  • % - Vá para os colchetes correspondentes ou entre parênteses no código.

Aqui estão algumas que você pode fazer antes mesmo de abrir o vim. Na linha de comando, Vim +N filenamevocê pode ir para a enésima linha do arquivo depois de abri-lo.

vim +10 /etc/passwd

Vim +/pattern filenameabre o arquivo para a primeira linha com a ocorrência do pattern. No exemplo a seguir, o vim abrirá o arquivo README e saltará para a primeira ocorrência da palavra “install”.

vim +/install README

Vim +?patten filenameabre o arquivo para a última ocorrência de pattern. No exemplo a seguir, ele abrirá o arquivo README e pulará para a última ocorrência da palavra "bug".

vim +?bug README

Arcanjo33
fonte
8

Como uma alternativa para hardmode, o seguinte trecho permitirá que você use h, j, k, e lcomo normal, mas produzir um sinal sonoro para avisar quando eles são usados em rápida sucessão.

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>

Para outra abordagem para limitar o hjkluso, consulte vim-melaço .

djjcast
fonte
3

Como alternativa, use o Modo Médio, que ainda tenta aprender os "movimentos certos", mas é menos rigoroso ao fazer isso:

O modo Médio é um plug-in do Vim que limita os movimentos de caracteres, mas não os desativa completamente. Por padrão, o modo médio permitirá apenas dois movimentos consecutivos em caracteres.

luka5z
fonte
1

Eu tive esse mesmo problema, digitei :help hardmodeLo e eis que encontrei

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

A propósito, eu sou um dos iniciantes no vim que achou este plugin extremamente útil, pois realmente me afastou do mouse.

ewianda
fonte