Mouvements à grains fins Vim HardMode

11

J'ai récemment découvert le mode dur de Vim et j'ai décidé d'essayer de l'utiliser. Cependant, je rencontre des problèmes avec les mouvements des grains fins.

Par exemple, disons que je veux vraiment monter ou descendre d'une ligne. Depuis jet ksont désactivés, je ne sais pas quelles meilleures alternatives existent pour cela.

J'ai rencontré le même problème lorsque je veux déplacer un ou deux caractères à droite ou à gauche. Est-ce que quelqu'un sait comment remplacer ces types de mouvements?

Voici le plugin que j'utilise: https://github.com/wikitopian/hardmode .

Phaino
la source
Quel plugin stupide! Utilisez ce qui fonctionne.
romainl
Je suis vraiment d'accord avec romainl: c'est bien d'apprendre à naviguer efficacement dans un fichier mais s'imposer ce type de plugin n'est pas une peine nécessaire. Vous pourriez toujours être intéressé par ma réponse ici (plus précisément la partie sur /et ?.
statox
1
Je serais respectueusement en désaccord avec statox et romainl ici. La navigation directe vers les cibles que vous souhaitez modifier peut considérablement améliorer votre efficacité globale. Bien que cela puisse vous ralentir au début, à long terme, vous compenserez le temps perdu en utilisant de meilleures navigations.
Archangel33
En fait @ Archangel33 Je pense que nous partageons la même opinion sur le fait que naviguer avec plus de précision avec d'autres méthodes que hjklc'est une bonne chose. Ce que je désapprouvais, c'était le plugin lui-même: à mon avis, il est préférable d'apprendre de nouvelles façons de naviguer une fois à la fois (vous ne pouvez pas toutes les apprendre en même temps) et pendant l'apprentissage en utilisant des plugins qui vous frustrent n'est pas nécessaire. Cela étant dit, ce n'est que mon avis: on a le droit d'être en désaccord :-)
statox
1
@Alex En effet, mon commentaire n'était que mon opinion personnelle, je ne considérerais jamais que j'ai la seule solution universelle et c'est pourquoi ma dernière phrase était That being said it is only my opinion: one has right to disagree. Maintenant, le débat est potentiellement sans fin: bien sûr, certaines personnes bénéficieront de ce type de plugin alors qu'il ne fera que frustrer d'autres et nuire à leur apprentissage. Si vous souhaitez en parler, j'en discuterai volontiers avec vous dans un chat mais nous ne devrions pas spammer les commentaires de la question avec ce genre de débat :-)
statox

Réponses:

17

Ce ne sont que quelques-uns des mouvements dont Vim est capable, ceux-ci devraient vous permettre de démarrer pour l'instant.

TL; DR

  1. Utilisez la fonction d'aide intégrée de Vim sur navigationou mieux encoreusr_03.txt
  2. Recherche google pour vim advanced movements
  3. Naviguer avec / vers les mots
  4. allez ici Tous les bons coups

Mouvements

Il existe de nombreuses façons de se déplacer dans vim. J'ai énuméré certaines que j'ai trouvées en cherchant vim advanced movementset quelques-unes que j'utilise tout le temps. Je suis sûr que vous connaissez la plupart de ceux-ci, mais ceux que je pense que vous voudrez également porter une attention particulière sont les mots navigation.

Voici quelques-uns qui permettent la navigation à l'intérieur d'une ligne.

  • 0 - aller au début de la ligne courante.
  • ^ - passez au premier caractère non vierge de la ligne.
  • $ - aller à la fin de la ligne actuelle.
  • g_ - aller au dernier caractère non vierge de la ligne.

La navigation avec des mots peut être très utile. Pour être plus précis, vous devez naviguer par rapport aux mots, en utilisant:

  • e - aller à la fin du mot actuel.
  • E - aller à la fin du MOT en cours.
  • b - aller au mot précédent (avant).
  • B - aller au MOT précédent (avant).
  • w - passez au mot suivant.
  • W - passez au mot suivant.

Un mot se compose d'une séquence de lettres, de chiffres et de traits de soulignement. Un MOT se compose d'une séquence de caractères non vides, séparés par un espace blanc. words | WORDS peut également changer en fonction de vos paramètres vim.

Exemple pour montrer la différence entre WORD et word

192.168.1.1 est un seul mot.

192.168.1.1 est sept mots.

Les mouvements de recherche peuvent également être extrêmement utiles.

  • /pattern - Recherchez un motif qui vous amènera à la prochaine occurrence de pattern
    • nvous amènera à la prochaine correspondance patternsous le curseur.
  • ?pattern- Recherchez un motif qui vous amènera à l'occurrence précédente de pattern.
    • Nvous amènera à la prochaine correspondance patternau-dessus du curseur.
  • * - Aller à l'occurrence suivante du mot actuel sous le curseur.
  • # - Aller à l'occurrence précédente du mot actuel sous le curseur.
  • % - Accédez aux accolades correspondantes ou aux parenthèses dans le code.

Voici quelques-unes que vous pouvez faire avant même d'ouvrir vim, à partir de la ligne de commande Vim +N filenamevous permet d'accéder à la Nième ligne du fichier après l'avoir ouvert.

vim +10 /etc/passwd

Vim +/pattern filenameouvre le fichier sur la première ligne avec l'occurrence de pattern. Dans l'exemple suivant, vim ouvrira le fichier README et passera à la première occurrence du mot «install».

vim +/install README

Vim +?patten filenameouvre le fichier à la dernière occurrence de pattern. Dans l'exemple suivant, il ouvrira le fichier README et passera à la dernière occurrence du mot «bug».

vim +?bug README

Archange33
la source
8

Comme alternative à hardmode, l'extrait suivant vous permettra d'utiliser h, j, ket lcomme d' habitude , mais produire un signal sonore pour vous avertir quand ils sont utilisés en succession rapide.

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>

Pour une autre approche pour limiter l' hjklutilisation, voir vim-mélasse .

djjcast
la source
3

Vous pouvez également utiliser le mode moyen qui essaie toujours de vous apprendre les «bons coups», mais est moins strict pour ce faire:

Le mode moyen est un plugin Vim qui limite les mouvements par caractère, mais ne les désactive pas complètement. Par défaut, le mode moyen n'autorisera que deux mouvements consécutifs en fonction des caractères.

luka5z
la source
1

J'ai eu ce même problème puis j'ai tapé :help hardmodeLo et voici j'ai trouvé

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

Soit dit en passant, je suis l'un des débutants de Vim qui a trouvé ce plugin extrêmement utile car il m'a vraiment éloigné de la souris.

ewianda
la source