Déplace le curseur au début des caractères non-blancs d'une ligne dans Vim

49

Dans Vim, existe-t-il un moyen de déplacer le curseur au début de caractères non blancs dans une ligne? Par exemple, comment puis-je déplacer le curseur sur le "S" dans la deuxième ligne ci-dessous?

Première ligne
    Deuxième ligne

Si c'est important, j'utilise principalement MacVim, mais j'aimerais aussi pouvoir le faire depuis la console.

Merci!

Joe Mornin
la source

Réponses:

58

Si je comprends bien - de :h ^:

^ To the first non-blank character of the line.
  |exclusive| motion.

(contrairement à 0, ce qui vous amène au début, indépendamment des espaces blancs ou non)

slhck
la source
1
+1 sur le 0commentaire
Roy Truelove
47

Au lieu d'appuyer sur, ^vous pouvez appuyer sur _(trait de soulignement) pour passer au premier caractère non-blanc de la même ligne que le curseur.

+et -passez au premier caractère non-blanc de la ligne suivante / précédente.

(Ces commandes ne fonctionnent qu'en mode commande, pas en mode insertion.)

Ben
la source
8

Également éventuellement utile: + et - déplacent le curseur vers le haut ou le bas, respectivement, vers le premier caractère non vide.

shmup
la source
4

ci-dessous est un extrait de .vimrc
^[[1~est créé en appuyant sur ctrl+vetHome

"jump to first non-whitespace on line, jump to begining of line if already at first non-whitespace
map <Home> :call LineHome()<CR>:echo<CR>
imap <Home> <C-R>=LineHome()<CR>
map ^[[1~ :call LineHome()<CR>:echo<CR>
imap ^[[1~ <C-R>=LineHome()<CR>
function! LineHome()
  let x = col('.')
  execute "normal ^"
  if x == col('.')
    execute "normal 0"
  endif
  return ""
endfunction
Andrew Sohn
la source
Merci, c'est ce que je cherchais. Ce comportement est courant sur les éditeurs de nos jours (Atom / VSCode / Sublime pour en nommer quelques-uns) et je m'y suis habitué ...
YoYoYonnY
0

En développant la réponse de Andrew Sohn, si vous souhaitez utiliser 0 pour ce comportement, emballez-le comme suit:

function! LineHome()
  let x = col('.')
  execute "normal ^"
  if x == col('.')
    unmap 0
    execute "normal 0"
    map 0 :call LineHome()<CR>:echo<CR>
  endif
  return ""
endfunction 
utilisateur2448373
la source
-1

Je viens de remapper la touche 0 à ^

Editez votre ~ / .vimrc

set visualbell t_vb=
map 0 ^
Sunding Wei
la source