Sposta il cursore all'inizio di caratteri non bianchi in una riga in Vim


49

In Vim, c'è un modo per spostare il cursore all'inizio di caratteri non bianchi in una riga? Ad esempio, come posso spostare il cursore sulla "S" nella seconda riga in basso?

Prima linea
    Seconda linea

Se è importante, utilizzo principalmente MacVim, ma mi piacerebbe anche poterlo fare dalla console.

Grazie!

Risposte:


58

Se ho capito bene - da :h ^:

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

(al contrario di 0, che ti porta all'inizio, indipendentemente dallo spazio bianco o meno)


1
+1 sul 0commento
Roy Truelove,

47

Invece di premere ^è possibile premere _(trattino basso) per passare al primo carattere non bianco sulla stessa riga su cui si trova il cursore.

+e -passa al primo carattere non bianco nella riga successiva / precedente.

(Questi comandi funzionano solo in modalità comando, non in modalità inserimento.)


8

Forse anche utile: + e - sposta il cursore su o giù, rispettivamente, sul primo carattere non vuoto.


4

di seguito è riportato uno snippet di .vimrc
^[[1~premendo 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

Grazie, questo è quello che stavo cercando. Oggi questo comportamento è comune negli editor (Atom / VSCode / Sublime per citarne alcuni) e mi sono abituato ...
YoYoYonnY,

0

Espandendo la risposta di Andrew Sohn, se si desidera utilizzare 0 per questo comportamento, basta avvolgerlo in questo modo:

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

Ho appena rimappato il tasto 0 su ^

Modifica il tuo ~ / .vimrc

set visualbell t_vb=
map 0 ^
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.