Movimientos de grano fino Vim HardMode

11

Recientemente descubrí el modo difícil de Vim y decidí intentar usarlo. Sin embargo, me encuentro con algunos problemas con los movimientos de grano fino.

Por ejemplo, digamos que realmente solo quiero subir o bajar una línea. Dado jy kse desactivan, no estoy seguro de lo mejores alternativas existen para ello.

Me he encontrado con el mismo problema cuando quiero mover uno o dos caracteres a la derecha o a la izquierda. ¿Alguien sabe cómo uno reemplazaría este tipo de movimientos?

Este es el complemento que estoy usando: https://github.com/wikitopian/hardmode .

Phaino
fuente
¡Qué estúpido plugin! Usa lo que funcione.
romainl
Estoy realmente de acuerdo con romainl: es bueno aprender a navegar de manera eficiente en un archivo, pero imponerse a sí mismo este tipo de complemento no es un dolor necesario. Aún así, podría estar interesado en mi respuesta aquí (más precisamente, la parte sobre /y ?.
statox
1
Respetuosamente estaría en desacuerdo con statox y romainl aquí. Navegar directamente a los objetivos que desea cambiar puede mejorar enormemente su eficiencia general. Si bien esto puede ralentizarlo al principio, a la larga compensará el tiempo perdido utilizando mejores navegaciones.
Archangel33
En realidad @ Archangel33 creo que compartimos la misma opinión sobre el hecho de que navegar con mayor precisión con otros métodos hjkles algo bueno. Lo que desaprobaba era el complemento en sí: en mi opinión, es mejor aprender nuevas formas de navegar una vez a la vez (no puedes aprenderlas todas al mismo tiempo) y durante el aprendizaje usar complementos que te frustran no es necesario. Dicho esto, es solo mi opinión: uno tiene derecho a estar en desacuerdo :-)
statox
1
@Alex De hecho, mi comentario fue solo mi opinión personal, nunca consideraría que tengo la única y universal solución, por eso fue mi última oración That being said it is only my opinion: one has right to disagree. Ahora, el debate es potencialmente interminable: por supuesto, algunas personas se beneficiarán de este tipo de complemento, mientras que solo frustrará a otros y dañará su aprendizaje. Si desea hablar sobre ello, con gusto lo discutiré con usted en un chat, pero no deberíamos enviar los comentarios de la pregunta por correo electrónico con este tipo de debate :-)
statox

Respuestas:

17

Estos son solo algunos de los movimientos que vim es capaz de hacer, estos deberían ayudarte a comenzar por ahora.

TL; DR

  1. Utilice la función de ayuda integrada de Vim navigationo mejor aúnusr_03.txt
  2. Busca en google vim advanced movements
  3. Navegar con / a palabras
  4. ir aquí Todos los movimientos correctos

Movimientos

Hay muchas maneras de moverse en vim. He enumerado algunas que encontré al buscar vim advanced movements, y algunas que uso todo el tiempo. Estoy seguro de que conoce la mayoría de estos, pero los que creo que también querrá prestar especial atención son las palabras de navegación.

Aquí hay algunos que permiten la navegación dentro de una línea.

  • 0 - Ir al inicio de la línea actual.
  • ^ - vaya al primer carácter no en blanco de la línea.
  • $ - Ir al final de la línea actual.
  • g_ - Ir al último carácter no en blanco de la línea.

La navegación con palabras puede ser muy útil. Para ser más granular, debe navegar en relación con las palabras, utilizando:

  • e - Ir al final de la palabra actual.
  • E - Ir al final de la PALABRA actual.
  • b - Ir a la palabra anterior (anterior).
  • B - ir a la PALABRA anterior (antes).
  • w - pase a la siguiente palabra.
  • W - Ir a la siguiente PALABRA.

Una palabra consiste en una secuencia de letras, dígitos y guiones bajos. Una PALABRA consiste en una secuencia de caracteres no en blanco, separados por espacios en blanco. palabras | PALABRAS también pueden cambiar dependiendo de la configuración de vim.

Ejemplo para mostrar la diferencia entre WORD y word

192.168.1.1 es una sola palabra.

192.168.1.1 son siete palabras

Los movimientos de búsqueda también pueden ser extremadamente útiles.

  • /pattern - Busque un patrón que lo llevará a la próxima aparición de pattern
    • nte llevará a la siguiente coincidencia patterndebajo del cursor.
  • ?pattern- Busca un patrón que te llevará a la aparición anterior de pattern.
    • Nte llevará a la siguiente coincidencia de patternarriba del cursor.
  • * - Ir a la siguiente aparición de la palabra actual debajo del cursor.
  • # - Ir a la aparición anterior de la palabra actual debajo del cursor.
  • % - Vaya a las llaves coincidentes, o paréntesis dentro del código.

Aquí hay algunas que puede hacer incluso antes de abrir vim, desde la línea de comando le Vim +N filenamepermite ir a la enésima línea del archivo después de abrirlo.

vim +10 /etc/passwd

Vim +/pattern filenameabre el archivo a la primera línea con la aparición de pattern. En el siguiente ejemplo, vim abrirá el archivo README y saltará a la primera aparición de la palabra "instalar".

vim +/install README

Vim +?patten filenameabre el archivo a la última aparición de pattern. En el siguiente ejemplo, abrirá el archivo README y saltará a la última aparición de la palabra "error".

vim +?bug README

Arcángel33
fuente
8

Como alternativa a hardmode, el siguiente fragmento se permitirá utilizar h, j, k, y lcomo de costumbre, pero producen un pitido audible para que le avise cuando se utilizan en rápida sucesión.

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 otro enfoque para limitar el hjkluso, vea vim-melaza .

djjcast
fuente
3

Alternativamente, use el Modo Medio, que aún trata de aprender "movimientos correctos", pero es menos estricto al hacerlo:

El modo medio es un complemento de Vim que limita los movimientos de carácter, pero no los desactiva por completo. Por defecto, el modo medio solo permitirá dos movimientos consecutivos de carácter.

luka5z
fuente
1

Tuve este mismo problema, luego escribí :help hardmodeLo y he aquí que encontré

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

Por cierto, soy uno de los principiantes de vim que encontraron este complemento extremadamente útil, ya que realmente me alejó del mouse.

ewianda
fuente