我有一个习惯,就是使用'home'键回到一行的开头.当我最近开始使用vim时,我注意到当我按下带有缩进的衬里的主页键时,它会将我返回到行的最开头.在Notepad ++(我以前使用的编辑器)中,它会在缩进后立即将我返回到该行的代码的开头.
有没有办法在vim中复制这种行为?通常,当我按下它时,它在插入模式下(通常)在那里粘贴一个变量.
我set smartindent在我的vimrc中,set noautoindent作为"提示"页面告诉我确保禁用autoindent(虽然它似乎首先没有启用 - 也许这个选项是无关紧要的.)
Gre*_*ill 30
有两种常用的方法可以在Vim中找到一行的"开头":
我发现使用0w对于我来说通常是最便捷的方式来转到一行上的第一个非空白字符,它与键的数量相同^并且更容易到达.(当然,如果线上没有前导空格,请不要按w.)
小智 13
您可以重新映射Home为^(文档说Home的默认函数等同于移动命令1|):
:map <Home> ^
:imap <Home> <Esc>^i
Run Code Online (Sandbox Code Playgroud)
哪个应该使插入模式映射等效于退出插入模式,按下^然后返回到插入模式.我不知道在插入模式下映射运动命令的最佳方法,所以这可能会破坏某些东西,但它似乎有效.
至于你的缩进设置,它们不应该对运动控制有影响,但我也认为你可能更喜欢让它们设置不同.autoindent只保留新行的当前缩进(因此,如果在行的开头放置4个空格,则在按返回后,新行也将在其前面放置4个空格).我不知道你为什么不想这样,因为它几乎适用于任何编程语言,甚至只是自由形式的文本.另一方面,smartindent实现了一些硬编码的轻微C-ish缩进规则,例如在打开后缩进{,并在关闭后进行deindenting},但不会自动从前一行继承缩进.如果您使用smartindent,文档建议保持自动注册.
但是,smartindent对于那些不符合其硬编码规则的语言来说是无用的,甚至是非常有害的(比如当它自动从任何以'#'开头的行中删除缩进时,它认为这是一个预处理器指令但是错误的python程序员试图写一个缩进的评论).
所以vim还包括一个更高级的缩进模式,文件类型缩进,它允许基于每种语言/文件类型的灵活缩进规则,并且是大多数人(甚至是类C语言)的首选缩进模式.如果你确实使用了filetype缩进,最好关闭smartindent(否则它会干扰文件类型缩进,比如将所有注释行移动到python文件中的第0列).
就个人而言,我总是有自动注册,在可用时使用文件类型,从不使用smartindent.我的.vimrc包括:
set autoindent " doesn't interfere with filetype indents, and is useful for text
if has("autocmd")
" Enable file type detection and indentation
filetype plugin indent on
set nosmartindent
endif
Run Code Online (Sandbox Code Playgroud)
我想有一些事情可以让smartindent在文件类型不存在文件类型缩进时打开,如果你正在编辑那些没有文件类型缩进的许多不同的类C语言.
这就是我的.vimrc.Home如果您在行中的任何位置,则此映射将移动到文本的开头;如果您位于文本的开头,则映射到列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>
Run Code Online (Sandbox Code Playgroud)
注意:我使用映射Home到Alt Gr+ 的键盘布局A,这就是我使用它的原因.如果您必须离开键盘的字母区域Home,则应该转到正常模式.