按「;“家”;在一条缩进线上的Vim中

按「;“家”;在一条缩进线上的Vim中,vim,key,line,Vim,Key,Line,我有一个坏习惯,就是用“home”键回到一行的开头。当我最近开始使用vim时,我注意到当我在缩进的线条上按home键时,它会将我返回到线条的最开始。在记事本++(我以前使用的编辑器)中,它会将我返回到该行代码的开头,就在缩进之后 有没有办法在vim中复制这种行为?通常,当我按home键时,我(通常)会在插入模式下将变量粘贴到那里 我在vimrc中设置了智能缩进,其中设置无自动缩进作为一个“提示”页面,告诉我要确保禁用自动缩进(尽管它似乎一开始没有启用-可能该选项是无关的)。尝试按0(另请参见:h

我有一个坏习惯,就是用“home”键回到一行的开头。当我最近开始使用vim时,我注意到当我在缩进的线条上按home键时,它会将我返回到线条的最开始。在记事本++(我以前使用的编辑器)中,它会将我返回到该行代码的开头,就在缩进之后

有没有办法在vim中复制这种行为?通常,当我按home键时,我(通常)会在插入模式下将变量粘贴到那里


我在vimrc中设置了
智能缩进
,其中
设置无自动缩进
作为一个“提示”页面,告诉我要确保禁用自动缩进(尽管它似乎一开始没有启用-可能该选项是无关的)。

尝试按
0
(另请参见
:help 0

此外,这可能有助于:

:imap <C-Home> <esc>0a
:imap 0a

在Vim中,有两种常见的方法可以转到行的“开头”:

  • 0(零)转到文本的第一列
  • ^转到行中的第一个非空白
我发现使用0w通常是我查找行中第一个非空字符最方便的方法,它的键数与^相同,而且更容易找到。(当然,如果行中没有前导空格,请不要按w。)

您可以将Home重新映射为与^相同的内容(文档称Home的默认功能相当于移动命令1 |):


我想,只有当文件类型不存在文件类型缩进时,如果您正在编辑许多不同的类C语言,而没有可用的文件类型缩进,您才可以启用smartindent。

以下是我的
.vimrc
中的内容。这将映射到要移动到的起始位置 如果在行中的任何位置,则为文本;如果在开头,则为第0列 正文的最后一段

function ExtendedHome()
    let column = col('.')
    normal! ^
    if column == col('.')
        normal! 0
    endif
endfunction
noremap <silent> <Home> :call ExtendedHome()<CR>
inoremap <silent> <Home> <C-O>:call ExtendedHome()<CR>
函数ExtendedHome()
让列=列('.'))
正常^
如果列==列('.'))
正常!0
恩迪夫
端功能
noremap:调用ExtendedHome()
inoremap:调用ExtendedHome()

注意:我使用的键盘布局映射到Alt Gr+a,这就是我使用这个的原因。如果您必须离开键盘的字母字段才能到家,您可能应该改为进入正常模式。

您也可以在正常模式下使用
\u
转到当前行的第一个非空白字符。您还可以在此运动中使用计数

_  <underscore>     [count] - 1 lines downward,
                    on the first non-blank character linewise.
\uu[count]-向下1行,
在第一个非空字符上按行显示。

那么,在插入模式下无法执行此操作?我想我应该习惯于两者之间的交流;我在插入模式下根本不使用光标移动。这篇文章可能会有帮助:@Reid-你可能会用一种或另一种方式映射它(见下文)-但是所有的移动都应该在N模式下完成,而不是I模式。啊哈,这是真的。我想我最终会习惯的。感谢您的帮助,您可以通过说
imap I
而不是
^I
将插入模式映射缩减一个字符
function ExtendedHome()
    let column = col('.')
    normal! ^
    if column == col('.')
        normal! 0
    endif
endfunction
noremap <silent> <Home> :call ExtendedHome()<CR>
inoremap <silent> <Home> <C-O>:call ExtendedHome()<CR>
_  <underscore>     [count] - 1 lines downward,
                    on the first non-blank character linewise.