Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim——根据语法上下文更改命令的行为_Vim - Fatal编程技术网

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()
。。。