356 votes

Traverser le texte en mode insertion

Alors que dans Mode d'insertion Dans Vim, existe-t-il un moyen de parcourir le texte en déplaçant certains caractères vers l'avant ou vers l'arrière autrement qu'en utilisant les touches fléchées ?

Si j'appuie sur h , j , k y l en mode Insertion, les caractères réels sont imprimés à l'écran au lieu de se déplacer dans le texte.

La façon dont je le fais en ce moment est de recourir à Ctrl + [ ( Esc ) et de parcourir le texte à ce moment-là ; mais il est évident que cela n'est pas productif.

1 votes

Une astuce : il est également utile de faire correspondre escape à une combinaison de touches plus proche (c'est-à-dire imap jk <Esc> ) afin que vous n'ayez pas à interrompre votre élan et à traverser votre clavier pour appuyer sur la touche.

7 votes

J'aime ça ( <ESC> ) mis en correspondance avec kj au lieu de jk ; mon ami Dijkstra est à blâmer !

11 votes

Tengo jk y kj J'ai donc appuyé sur le bouton comme un gros bouton avec deux doigts et peu importe l'ordre, je suis de retour à la normale.

711voto

Pavel Shved Points 34706

Bien qu'il puisse être logique que vous puissiez utiliser l'option h j k l pour parcourir l'éditeur en mode insertion, mais ce n'est pas la façon dont Vim est censé être utilisé ! Il y a de nombreuses commandes que Vim fournit pour rendre l'édition plus rapide y plus facile.

Le bon chemin est pour appuyer sur Esc Il faut aller là où l'on veut faire une petite correction, la fixer, revenir en arrière et continuer à éditer. C'est efficace parce que Vim a beaucoup plus de mouvements que le caractère habituel avant/arrière/haut/bas. Après en avoir appris davantage, cette méthode sera plus productive.

Voici quelques cas d'utilisation :

  • Vous avez accidentellement tapé "accifentally". Pas de problème, la séquence EscFfrdA corrigera l'erreur et vous ramènera à l'endroit où vous étiez en train d'éditer. Le site Ff déplacera votre curseur en arrière jusqu'au premier caractère "f" rencontré. Comparez cela avec Ctrl + DeldEnd qui fait pratiquement la même chose dans un éditeur occasionnel, mais nécessite plus de frappes et vous oblige à déplacer votre main hors de la zone alphanumérique du clavier.
  • Vous avez accidentellement tapé "vous avez accidentellement tapé", mais vous voulez le corriger en "vous avez intentionnellement tapé". Alors Esc2bcw effacera le mot que vous voulez corriger et vous amènera en mode insertion, afin que vous puissiez immédiatement le retaper. Pour revenir à l'édition, il suffit d'appuyer sur A au lieu de End de sorte que vous n'ayez pas à déplacer votre main pour atteindre la carte. End clé.
  • Vous avez accidentellement tapé "souris" au lieu de "mice". Pas de problème - le bon vieux Ctrl + w supprimera le mot précédent sans quitter le mode insertion. Et il se trouve que c'est beaucoup plus rapide d'effacer un petit mot que de corriger des erreurs à l'intérieur de celui-ci. J'y suis tellement habitué que j'avais fermé la page du navigateur lorsque je tapais ce message !
  • Le nombre de répétitions est largement sous-utilisé. Avant de faire un mouvement, vous pouvez taper un nombre ; et le mouvement sera répété ce nombre de fois. Par exemple, 15h ramènera votre curseur 15 caractères en arrière et 4j déplacera votre curseur 4 lignes plus bas. Commencez à les utiliser et vous vous y habituerez rapidement. Si vous avez fait une erreur à dix caractères de votre curseur, vous découvrirez qu'en appuyant sur la touche 10 fois est beaucoup plus lent que l'approche itérative pour déplacer le curseur. Vous pouvez donc, à la place, taper rapidement les touches 12h (pour deviner approximativement combien de caractères en arrière vous devez déplacer votre curseur), et avancez immédiatement deux fois avec ll pour corriger rapidement l'erreur.

Mais, si vous toujours si vous souhaitez effectuer de petites traversées de texte sans quitter le mode insertion, suivez les instructions suivantes rson 's conseils et utiliser Ctrl + O . Prenons le premier exemple que j'ai mentionné ci-dessus, Ctrl + OFf vous fera passer à un caractère "f" précédent et vous laissera en mode insertion.

42 votes

+1 Excellente réponse et merci pour tous les exemples que vous avez donnés !

88 votes

Il est également intéressant de noter que vous pouvez utiliser Ctrl+o pour émettre une seule commande en mode normal. Cela peut parfois vous permettre d'arriver à bon port, surtout lorsqu'elle est combinée avec les commandes de mouvement t/T et f/F.

2 votes

Merci pour ce bon conseil rson !

187voto

felix Points 792

Alors que dans mode d'insertion Utilizar CtrlO pour aller à mode normal pour une seule commande :

CTRL-O h  move cursor left 
CTRL-O l  move cursor right
CTRL-O j  move cursor down
CTRL-O k  move cursor up

qui est probablement la façon la plus simple de faire ce que vous voulez et qui est facile à retenir.

Autres touches de contrôle très utiles en mode insertion :

CTRL-W    delete word to the left of cursor
CTRL-O D  delete everything to the right of cursor
CTRL-U    delete everything to the left of cursor
CTRL-H    backspace/delete
CTRL-J    insert newline (easier than reaching for the return key)
CTRL-T    indent current line
CTRL-D    un-indent current line

cela éliminera de nombreuses interruptions inutiles pour revenir au mode normal.

16 votes

Merci. Ceci devrait être considéré comme la bonne réponse. Elle est en fait utile.

2 votes

Sur mon mac, c'est o minuscule et non O majuscule. Est-ce différent de "vim standard" ? Je vois beaucoup d'endroits où ils semblent dire majuscules (à moins que ce ne soit juste une écriture négligée). Pouvez-vous confirmer ?

0 votes

Ok très utile. Cependant, il existe une combinaison intéressante que j'ai du mal à trouver et c'est la suppression de la ligne. Une chose très sous-estimée à faire en cas d'insertion accidentelle d'une ligne.

95voto

accolade Points 1173

Mode insertion

Mouvement

hjkl

En dépit de ce que Pavel Shved a déclaré - qu'il est probablement plus judicieux de s'habituer à Esc aping mode Insert - voici un exemple d'ensemble de mappings pour une navigation rapide dans le mode Insert :

" provide hjkl movements in Insert mode via the <Alt> modifier key
inoremap <A-h> <C-o>h
inoremap <A-j> <C-o>j
inoremap <A-k> <C-o>k
inoremap <A-l> <C-o>l

Cela rendra Alt + h en mode Insertion aller un caractère à gauche, Alt + j et ainsi de suite, de manière analogue à hjkl en mode normal.

Vous devez copier ce code dans votre fichier vimrc pour qu'il soit chargé à chaque fois que vous lancez vim (vous pouvez l'ouvrir en tapant :new $myvimrc à partir du mode Normal).

Tout mouvement en mode normal

Depuis le Alt n'est pas affectée (à quelque chose d'important) par défaut, vous pouvez, de la même manière, faire passer d'autres (ou toutes les) fonctionnalités du mode normal au mode insertion. Par exemple :
Déplacement au début du mot en cours avec Alt + b :

inoremap <A-b> <C-o>b
inoremap <A-w> <C-o>w

(Autres utilisations de Alt en mode insertion)

Il est utile de mentionner qu'il peut y avoir de meilleures utilisations pour les Alt Voici des mappings pour copier à partir d'une ligne adjacente la partie de la colonne actuelle jusqu'à la fin de la ligne :

" Insert the rest of the line below the cursor.
" Mnemonic: Elevate characters from below line
inoremap <A-e> 
    \<Esc>
    \jl
        \y$
    \hk
        \p
        \a
" Insert the rest of the line above the cursor.
" Mnemonic: Y depicts a funnel, through which the above line's characters pour onto the current line.
inoremap <A-y> 
    \<Esc>
    \kl
        \y$
    \hj
        \p
        \a

(J'ai utilisé \ continuation de la ligne et l'indentation pour plus de clarté. Les commandes sont interprétées comme si elles étaient écrites sur une seule ligne).

Touches de raccourci intégrées pour l'édition

CTRL-H   delete the character  in front of the cursor (same as <Backspace>)
CTRL-W   delete the word       in front of the cursor
CTRL-U   delete all characters in front of the cursor (influenced by the 'backspace' option)

(Il n'y a pas de touches de raccourci intégrées notables pour les déplacements en mode insertion).

Référence : :help insert-index


Mode ligne de commande

Cet ensemble de correspondances fait que la partie supérieure Alt + hjkl mouvements disponible dans la ligne de commande :

" provide hjkl movements in Command-line mode via the <Alt> modifier key
cnoremap <A-h> <Left>
cnoremap <A-j> <Down>
cnoremap <A-k> <Up>
cnoremap <A-l> <Right>

Alternativement, ces mappings ajoutent les mouvements à la fois en mode insertion et en mode ligne de commande en une seule fois :

" provide hjkl movements in Insert mode and Command-line mode via the <Alt> modifier key
noremap! <A-h> <Left>
noremap! <A-j> <Down>
noremap! <A-k> <Up>
noremap! <A-l> <Right>

Les commandes de mappage pour tirer les commandes du mode normal vers le mode ligne de commande sont un peu différentes des commandes de mappage du mode Insertion (parce que le mode Ligne de commande n'a pas les caractéristiques du mode Insertion). Ctrl + O ):

" Normal mode command(s) go… --v <-- here
cnoremap <expr> <A-h> &cedit. 'h' .'<C-c>'
cnoremap <expr> <A-j> &cedit. 'j' .'<C-c>'
cnoremap <expr> <A-k> &cedit. 'k' .'<C-c>'
cnoremap <expr> <A-l> &cedit. 'l' .'<C-c>'

cnoremap <expr> <A-b> &cedit. 'b' .'<C-c>'
cnoremap <expr> <A-w> &cedit. 'w' .'<C-c>'

Touches de raccourci intégrées pour le déplacement et l'édition

CTRL-B       cursor to beginning of command-line
CTRL-E       cursor to end       of command-line

CTRL-F       opens the command-line window (unless a different key is specified in 'cedit')

CTRL-H       delete the character  in front of the cursor (same as <Backspace>)
CTRL-W       delete the word       in front of the cursor
CTRL-U       delete all characters in front of the cursor

CTRL-P       recall previous command-line from history (that matches pattern in front of the cursor)
CTRL-N       recall next     command-line from history (that matches pattern in front of the cursor)
<Up>         recall previous command-line from history (that matches pattern in front of the cursor)
<Down>       recall next     command-line from history (that matches pattern in front of the cursor)
<S-Up>       recall previous command-line from history
<S-Down>     recall next     command-line from history
<PageUp>     recall previous command-line from history
<PageDown>   recall next     command-line from history

<S-Left>     cursor one word left
<C-Left>     cursor one word left
<S-Right>    cursor one word right
<C-Right>    cursor one word right

<LeftMouse>  cursor at mouse click

Référence : :help ex-edit-index

0 votes

@YugalJindle : Merci ! :) J'ai maintenant ajouté des informations sur le réglage du mode de la ligne de commande. (L'approche est un peu différente du mode Insertion).

0 votes

Shift - gauche/droite pour déplacer un mot entier ! !! Comment ai-je pu ne pas le savoir ? Merci.

0 votes

En fait en mode terminal alt envoie automatiquement esc avant vos commandes........

31voto

Shyam Habarakada Points 2360

Si vous êtes un puriste de vim, ne lisez pas cette réponse. En revanche, si vous êtes nouveau dans le monde de vim et que vous recherchez quelques conseils utiles que vous ne trouverez pas dans les centaines de tutoriels et blogs consacrés à vim, poursuivez votre lecture... :-)

Quelques méthodes peu orthodoxes (vim)

Nous sommes en 2014, et en tant que personne qui est récemment retournée à vim Je peux offrir quelques points de vue et conseils, potentiellement contradictoires.

Utilisez shift+gauche ou shift+droite pour parcourir les mots.

Bien que la répétition soit un concept puissant dans vim, je trouve (personnellement) étrange que son utilisation m'oblige à compter (lignes, caractères, mots, etc.) ou à faire des suppositions. Mon cerveau fonctionne habituellement comme "Je veux que le curseur "et non pas comme "Je veux le curseur _5_mots_à_la_gauche_". Le fait de pouvoir déplacer rapidement le curseur et d'observer visuellement où se trouve le point d'insertion de cette manière me permet de garder l'esprit sur ce que je suis en train d'éditer au lieu de devoir compter le nombre de sauts que je dois faire pour arriver à l'endroit que je dois éditer.

Activez le mode souris et utilisez la molette de la souris et le clic.

...pour naviguer dans de grandes quantités de texte.

La plupart (tous) les ordinateurs modernes ont un pavé tactile qui est étroitement intégré au clavier (par exemple, les MacBooks). Les concepteurs industriels ont passé de nombreuses années d'homme à optimiser ces conceptions afin que le vieux problème de devoir éloigner la main du clavier ne soit plus un réel problème. D'accord, ça l'est si vous êtes habitué à une souris et que vous n'aimez pas changer, mais pour quelqu'un qui découvre vim (comme ceux qui pourraient trouver cet article via une recherche), cela ne devrait pas être un problème.

En bonus, cliquer + glisser vous met en mode visuel.

Lorsque la souris est activée, le fait de cliquer et de glisser a pour effet de passer en mode visuel et de marquer une région pour l'arracher.

Et utilisez la molette de défilement

L'utilisation de la souris (molette) pour faire défiler les pages et le clic pour positionner le curseur (duh) fonctionnent tout simplement. Voir http://usevim.com/2012/05/16/mouse/ pour en savoir plus.

Et donc...

Ce sont ce que j'appellerais des méthodes plus modernes (utilisation de la souris, de la molette de défilement, etc.) de navigation dans vim, tout aussi efficaces selon votre préférence d'entrée.

HTH

8 votes

@MilesRout oui, j'avais un avertissement. Mais plus sérieusement, je pense qu'il y a une bonne proportion d'utilisateurs de vim dont le cerveau fonctionne comme le mien. C'est à dire ... mon cerveau fonctionne généralement comme "je veux le curseur là" et non comme "je veux le curseur ...". 5_mots_à_la_gauche ". Et la méthode conventionnelle de vim ne fonctionne pas très bien pour ces personnes. J'aime vim parce que a) il est disponible partout et b) il a des fonctionnalités puissantes. Je ne ressens cependant pas le besoin de me conformer à tous ses mécanismes par défaut.

4 votes

@MilesRout Il y a beaucoup de religion autour de ce genre de choses dans vim, donc je ne débattrai pas avec vous sur ce sujet. La méthode du compte de répétition ne m'aide pas, et la réponse acceptée l'appelle également comme quelque chose de fortement sous-utilisé. Je ne peux que deviner pourquoi c'est le cas. L'utilisation de w, b, etc. pour naviguer vers des endroits proches est excellente, mais pour aller plus loin, la molette de la souris fonctionne beaucoup mieux pour moi. Merci.

4 votes

+1. Je ne comprends pas le vote négatif. Il y a un avertissement. Prenez-le si vous l'aimez et passez-le si vous ne l'aimez pas.

14voto

everett1992 Points 349

De nombreuses personnes de la communauté Vim affirment qu'il ne faut pas naviguer en mode Insertion, que ce n'est pas la manière Vim. Je pense qu'il s'agit d'un sentiment erroné acquis lors de la transition d'éditeurs standard à Vim.

Vim est plus puissant lorsque vous utilisez ses outils pour créer des actions ou des trouvailles atomiques et répétables.

Il est possible de naviguer en mode insertion si vous corrigez une erreur que vous avez commise. dans la même session d'insertion. Vous ne devez pas naviguer en dehors de la plage de texte que vous avez modifiée.

Si vous faites une erreur lors de la saisie d'un texte et que vous sortez du mode Insertion pour la corriger, vous ne pourrez pas répéter l'action prévue, . répétera la correction.

Vim prend en charge de nombreuses touches de navigation en mode insertion. Il y a évidemment les touches fléchées, Home et End, mais il existe également de nombreux autres raccourcis. Voir :h ins-special-keys .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X