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!

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)


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).


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.


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

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 

-1

Acabo de reasignar la tecla 0 a ^

Edite su ~ / .vimrc

set visualbell t_vb=
map 0 ^
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.