41

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

First line
    Second line

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

Спасибо!

6 ответов6

49

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

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

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

39

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

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

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

5

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

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
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 
0

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

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

set visualbell t_vb=
map 0 ^

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .