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

Joe*_*nin 58 vim gvim macvim

在 Vim 中,有没有办法将光标移动到一行中非空白字符的开头?例如,如何将光标移动到下面第二行中的“S”?

第一行
    第二行

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

谢谢!

slh*_*hck 67

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

^ To the first non-blank character of the line.
  |exclusive| motion.
Run Code Online (Sandbox Code Playgroud)

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

  • +1 对 `0` 评论 (2认同)

小智 66

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

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

(这些命令仅在正常模式下有效,在插入模式下无效。)

  • 也可以使用 `<CR>` 作为 `+` 的替代,这很好,因为它不需要按住 shift。 (4认同)
  • 有关“^”和“_”动作之间的**差异**的讨论,[**参见此处**](https://unix.stackexchange.com/q/155926/39845)。 (2认同)

bad*_*eth 11

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


小智 6

下面是来自 .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
Run Code Online (Sandbox Code Playgroud)