Mova o cursor para o início de caracteres que não sejam espaços em branco em uma linha no Vim

49

No Vim, existe uma maneira de mover o cursor para o início de caracteres que não sejam espaços em branco em uma linha? Por exemplo, como posso mover o cursor para o "S" na segunda linha abaixo?

Primeira linha
    Segunda linha

Se isso importa, eu uso principalmente o MacVim, mas também gostaria de poder fazer isso no console.

Obrigado!

Joe Mornin
fonte

Respostas:

58

Se bem entendi - de :h ^:

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

(em contraste com o 0que leva você ao início, independentemente do espaço em branco ou não)

slhck
fonte
1
+1 no 0comentário
Roy Truelove
47

Em vez de pressionar, ^você pode pressionar _(sublinhado) para pular para o primeiro caractere que não seja espaço em branco na mesma linha em que o cursor está.

+e -pule para o primeiro caractere que não esteja em branco na linha seguinte / anterior.

(Esses comandos funcionam apenas no modo de comando, não no modo de inserção.)

Ben
fonte
8

Também é útil: + e - moverão o cursor para cima ou para baixo, respectivamente, para o primeiro caractere que não estiver em branco.

jared
fonte
4

abaixo está um trecho de .vimrc
^[[1~é criado pressionando ctrl+veHome

"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
fonte
Obrigado, é isso que eu estava procurando. Este comportamento é comum em editores hoje (Atom / VSCode / Sublime para citar alguns) e eu me acostumei com isso ...
YoYoYonnY
0

Expandindo a resposta de Andrew Sohn, se você quiser usar 0 para esse comportamento, basta envolvê-lo da seguinte maneira:

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 
user2448373
fonte
-1

Acabo de remapear a tecla 0 para ^

Edite seu ~ / .vimrc

set visualbell t_vb=
map 0 ^
Sunding Wei
fonte