将光标移动到Vim中一行中非空白字符的开头


48

在Vim中,是否可以将光标移动到行中非空白字符的开头?例如,如何将光标移动到下面第二行中的“ S”?

第一行
    第二行

如果有问题,我主要使用MacVim,但我也希望能够从控制台执行此操作。

谢谢!

Answers:


57

如果我正确理解-来自:h ^

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

(与相比0,无论您是否有空格,都可以从头开始)


1
+1的0评论
Roy Truelove

46

^您可以按_(下划线)跳到光标所在的同一行上的第一个非空白字符,而不用按。

+-跳至下一行/上一行的第一个非空白字符。

(这些命令仅在命令模式下起作用,而在插入模式下不起作用。)


8

也可能有用:+和-将光标分别向上或向下移动到第一个非空白字符。


4

下面是.vimrc的摘录,
^[[1~通过按ctrl+vHome

"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仅举几例),我已经习惯了……
YoYoYonnY16年

0

扩展Andrew Sohn的答案,如果您想对这种行为使用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 ^
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.