web-dev-qa-db-fra.com

Se déplacer au début de la ligne en mode Insertion

Je sais que je peux utiliser soit:

  1. Home en mode insertion
  2. Esc + i pour quitter le mode insertion et le saisir à nouveau, en passant effectivement au début de la ligne.

Mais ni me satisfait. Dans le premier cas, je dois pencher la tête pour frapper Home, parce que je ne peux pas le frapper aveuglément. Dans le second cas, mon bras gauche doit quitter la ligne d'arrivée pour frapper Esc, ce qui est agaçant aussi.

Des pensées?

76
Valentin

Ctrl+O en mode insertion, vous êtes en mode commande pour une seule pression sur une touche. Donc Ctrl+O puis Shift+I devrait accomplir ce que vous cherchez.

139
Greg Sexton

Vous pouvez entrer en mode insertion avec I (majuscule i).

Cela mettra le curseur au début de la ligne.

De même, vous pouvez utiliser A pour ajouter quelque chose à la fin de la ligne.

Cependant, cela ne résout pas vraiment le problème du déplacement alors que vous êtes déjà en mode Insertion.

Je viens de vérifier l'aide sur le mode Insertion, il n'y a pas de combinaison de touches en mode Insertion pour vous déplacer au début de la ligne.

Autre idée: Remapper une nouvelle commande uniquement en mode insertion.

inoremap <C-i> <Home>

44
Xavier T.

J'ai Ctrl + a et Ctrl + e mappés au début et à la fin de la ligne, respectivement. Cela correspond au comportement de la plupart des lignes de commande bash. Fonctionne bien pour moi.

inoremap <C-e> <Esc>A
inoremap <C-a> <Esc>I
20
Jonathan Cutrell

Si vous utilisez MacOS Terminal, accédez à Préférences ...> Paramètres> Clavier et mappez la touche de fin à Ctrl-O $ (elle est affichée sous la forme\017 $), puis utilisez fn + left pour simuler la touche de fin. Faites la même chose pour la clé home. Séquence d'échappement\033 [H fonctionne également pour la maison. 

3
CommanderHK

La meilleure chose à faire est de remapper l'action sur une clé différente (voir Comment remapper <Ctrl-Accueil> pour aller à la première ligne du fichier? pour des idées)

Je pense à la fréquence à laquelle j'utilise cette "fonctionnalité" et mappe-la en conséquence

1
tskulbru

Vous pouvez mapper les clés à ceci: 

inoremap II <Esc>I

ref: http://vim.wikia.com/wiki/Quick_command_in_insert_mode

0
pocoO

Un raccourci qui a fonctionné pour moi (mémoire musculaire et intuitivité) est de mapper __ (qui est un double _) pour "insérer au début de la ligne actuelle".

Raisonnement:

  • _ va déjà au début de la ligne
  • dans vim, doubler n'importe quoi est une façon très courante de faire cela "à cette ligne"
  • le double _ n'entre en conflit avec aucun mouvement (vous êtes déjà au début de la ligne)
  • votre main est déjà au bon endroit si vous êtes au début de la ligne et que vous voulez maintenant insérer.

vimscript:

"insert at start of current line by typing in __ (two underscores)
function DoubleUnderscore()
    if v:count == 0 && getcurpos()[2] == 1
        :silent call feedkeys('I', 'n')
    else
        :silent call feedkeys('^', v:count + 'n')
    endif
endfunction
nnoremap <silent> _ :call DoubleUnderscore()<CR>

C'est ce qui est compliqué, car l'alternative simple nnoremap __ _I fait que vim tarde à appuyer sur _ pour faire la distinction entre _ et __.

0
Mahmoud Al-Qudsi
ctrl+o then 0
     |      |
  letter  number
0
MetalGodwin