Mueva el cursor al comienzo de los caracteres que no sean espacios en blanco en una línea en Vim

49

En Vim, ¿hay alguna forma de mover el cursor al comienzo de los caracteres que no son espacios en blanco en una línea? Por ejemplo, ¿cómo puedo mover el cursor a la "S" en la segunda línea a continuación?

Primera linea
    Segunda linea

Si es importante, uso principalmente MacVim, pero también me gustaría poder hacerlo desde la consola.

¡Gracias!

Joe Mornin
fuente

Respuestas:

58

Si entiendo correctamente - de :h ^:

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

(en contraste con 0, que lo lleva al principio, independientemente de los espacios en blanco o no)

slhck
fuente
1
+1 en el 0comentario
Roy Truelove
47

En lugar de presionar ^, puede presionar _(subrayado) para saltar al primer carácter que no sea un espacio en blanco en la misma línea en la que está el cursor.

+y -salte al primer carácter que no sea un espacio en blanco en la línea siguiente / anterior.

(Estos comandos solo funcionan en modo comando, no en modo inserción).

Ben
fuente
8

También posiblemente útil: + y - moverán el cursor hacia arriba o hacia abajo, respectivamente, al primer carácter que no esté en blanco.

Jared
fuente
4

a continuación se muestra un fragmento de .vimrc
^[[1~se crea presionando ctrl+vyHome

"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
fuente
Gracias, esto es lo que estaba buscando. Este comportamiento es común en los editores hoy en día (Atom / VSCode / Sublime, por nombrar algunos) y ya me he acostumbrado ...
YoYoYonnY
0

Ampliando la respuesta de Andrew Sohn, si desea utilizar 0 para este comportamiento, simplemente envuélvalo así:

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 
usuario2448373
fuente
-1

Acabo de reasignar la tecla 0 a ^

Edite su ~ / .vimrc

set visualbell t_vb=
map 0 ^
Sunding Wei
fuente