Переместить курсор в начало непробельных символов в строке в Vim


49

В Vim есть способ переместить курсор в начало непробельных символов в строке? Например, как я могу переместить курсор на «S» во второй строке ниже?

Первая строка
    Вторая линия

Если это имеет значение, я в основном использую MacVim, но я также хотел бы сделать это с консоли.

Благодарность!

Ответы:


58

Если я правильно понимаю - от :h ^:

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

(в отличие от того 0, что приводит вас в начало, независимо от пробелов или нет)


1
+1 к 0комментарию
Рой Truelove

47

Вместо нажатия ^вы можете нажать _(подчеркнуть), чтобы перейти к первому непробельному символу в той же строке, в которой находится курсор.

+и -перейти к первому непробельному символу на следующей / предыдущей строке.

(Эти команды работают только в командном режиме, а не в режиме вставки.)


8

Также возможно полезно: + и - переместят курсор вверх или вниз, соответственно, к первому непустому символу.


4

ниже фрагмент от .vimrc
^[[1~создается путем нажатия ctrl+vиHome

"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

Спасибо, это то, что я искал. Такое поведение распространено в настоящее время в редакторах (Atom / VSCode / Sublime и многие другие), и я привык к этому ...
YoYoYonnY

0

В продолжение ответа Эндрю Сона, если вы хотите использовать 0 для этого поведения, просто оберните его так:

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

Я просто переназначаю клавишу 0 на ^

Отредактируйте ваш ~ / .vimrc

set visualbell t_vb=
map 0 ^
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.