Vim——根据语法上下文更改命令的行为
我倾向于这样的评论行:Vim——根据语法上下文更改命令的行为,vim,Vim,我倾向于这样的评论行: // This is a comment. // This is the second line of a comment paragraph. // This is a second paragraph... 我把光标放在这些直线的中间,我想开始添加一些东西。通常是在段落开头加一句话。点击I将把我带到前面的/。这是我想经常做的事情,它让我有点担心,如果没有一连串的移动命令或像^wi这样的笨拙动作,就没有快速到达那里的方法 我想将I命令调整为“智能”,这样,只有当光
// This is a comment.
// This is the second line of a comment paragraph.
// This is a second paragraph...
我把光标放在这些直线的中间,我想开始添加一些东西。通常是在段落开头加一句话。点击I
将把我带到前面的/
。这是我想经常做的事情,它让我有点担心,如果没有一连串的移动命令或像^wi
这样的笨拙动作,就没有快速到达那里的方法
我想将I
命令调整为“智能”,这样,只有当光标位于注释语法区域时,我才希望vim执行^wi
我能做这个吗?我很确定我能做到这一点,因为我有一个小命令,可以告诉我游标所在的语法类型 您可以保持这样的映射,将光标移动到
/
nmap <leader>I F/wi
nmap I F/wi
下面是一个小演示:
您可以保持这样的映射,将光标移动到
/
nmap <leader>I F/wi
nmap I F/wi
下面是一个小演示:
您可以将其作为一行程序来执行,但当涉及条件时,我更喜欢使用函数:
:nnoremap I :call SmartInsert()<CR>
由OP编辑:感谢您提供了这一伟大的起点。我开始写函数了,就在这里。它真的很方便
function! SmartInsert()
if synIDattr(synID(line("."), col("."), 1), "name") =~ "LineComment$"
normal! ^w " Can enhance this with something more general (no need tho)
startinsert
else
call feedkeys('I', 'n')
endif
endfun
nnoremap I :call SmartInsert()<CR>
函数!SmartInsert()
如果synIDattr(synID(行(“.”),列(“.”),1),“name”)=~“LineComment$”
正常^w“可以用更一般的东西来增强这一点(不需要tho)
startinsert
其他的
调用feedkeys('I','n')
恩迪夫
结束
nnoremap I:调用SmartInsert()
您可以将其作为一行程序来完成,但当涉及条件时,我更喜欢使用函数:
:nnoremap I :call SmartInsert()<CR>
按OP编辑:感谢您提供了这一伟大的起点。我开始编写函数,就在这里。它非常方便
function! SmartInsert()
if synIDattr(synID(line("."), col("."), 1), "name") =~ "LineComment$"
normal! ^w " Can enhance this with something more general (no need tho)
startinsert
else
call feedkeys('I', 'n')
endif
endfun
nnoremap I :call SmartInsert()<CR>
函数!SmartInsert()
如果synIDattr(synID(行(“.”),列(“.”),1),“name”)=~“LineComment$”
正常!^w“可以用更一般的东西来增强这一点(无需tho)
startinsert
其他的
调用feedkeys('I','n')
恩迪夫
结束
nnoremap I:调用SmartInsert()
哦,实际上你知道,这种逻辑可能就足够了。不过,有时注释以#
或*
(多行)开头。这就是^wi
的原因。但是^wi
在您重复示例的第2行和第4行时会失败。不是我的,你是对的。不知道我是怎么重复这些的。然后你可以把I
映射到^wi
哦,实际上你知道吗,这种逻辑可能就足够了。不过,有时注释以#
或*
(多行)开头。这就是^wi
的原因。但是^wi
在您重复示例的第2行和第4行时会失败。不是我的,你是对的。不知道我是怎么重复这些的。然后您可以将I
映射到^wi
,不幸的是,此螺钉具有
重复命令功能。过去,如果我对一行进行注释,我会键入I/
,然后四处移动,点击更多行上的
,对它们进行注释。但是现在这将不起作用,因为重复只会重复一个插入(至少它知道要记住那么多…),但是^
显然不是为它存储的。我现在正在试验feedkeys()
…不幸的是,这与
重复命令功能有关。过去,如果我对一行进行注释,我会键入I/
,然后四处移动,点击更多行上的
,对它们进行注释。但是现在这将不起作用,因为重复只会重复一个插入(至少它知道要记住那么多…),但是^
显然不是为它存储的。我现在正在试验feedkeys()
。。。