Function 这个简单的vim函数有什么问题?
请查看我在Function 这个简单的vim函数有什么问题?,function,vim,call,Function,Vim,Call,请查看我在/.gvimrc文件中编写的以下vim函数。 用于从“开始行”和“结束行”指定的行范围中删除每行最后的“n”个字符的函数id 但当我将其作为函数并在vim中调用时 :call RLNC(3, 128, 203) 这就是我在这里做的实际操作 :start_line,end_lines/.\{n}$// 这只不过是 :128,203s/.\{3}$// 请帮我找出哪里出了问题 其给出的错误是错误是: E15: Invalid expression: . a:start_line .
/.gvimrc
文件中编写的以下vim函数。
用于从“开始行”和“结束行”指定的行范围中删除每行最后的“n”个字符的函数id
但当我将其作为函数并在vim中调用时
:call RLNC(3, 128, 203)
这就是我在这里做的实际操作
:start_line,end_lines/.\{n}$//
这只不过是
:128,203s/.\{3}$//
请帮我找出哪里出了问题
其给出的错误是错误是:
E15: Invalid expression: . a:start_line . "," . a:end_line . "s/.\{" . a:n . "}$//"
所以,第一个周期是可疑的。:execute
命令接受(一个或多个)表达式。通过
进行的字符串连接仅在字符串之间进行,而不是在开始时进行
只需停止第一个
:
execute a:start_line . "," . a:end_line . "s/.\{" . a:n . "}$//"
手动连接是乏味的。最好使用printf():
下一个问题是,在双引号内,反斜杠必须转义(加倍)。最好使用单引号:
execute printf('%d,%ds/.\{%d}$//', a:start_line, a:end_line, a:n)
最后,Vim有一种特殊的语法将范围传递给函数。请参见:帮助功能范围示例
。您不需要使用它,但它使调用更自然:
:128,203call RLNC(3)
但是,我可能会继续定义一个包装函数的自定义命令
:command! -range -nargs=1 RLNC call RLNC(<args>, <line1>, <line2>)
:命令-范围-nargs=1 RLNC调用RLNC(,)
如果您的函数实际上并不更复杂,我们现在可以将其内联并完全删除该函数:
:command! -range -nargs=1 RLNC execute printf('%d,%ds/.\{%d}$//', <line1>, <line2>, <args>)
:命令-范围-nargs=1 RLNC执行printf(“%d,%ds/\{%d}$/',)
(请注意,如果没有函数,最后一个搜索模式将被删除。)错误是:
E15: Invalid expression: . a:start_line . "," . a:end_line . "s/.\{" . a:n . "}$//"
所以,第一个周期是可疑的。:execute
命令接受(一个或多个)表达式。通过
进行的字符串连接仅在字符串之间进行,而不是在开始时进行
只需停止第一个
:
execute a:start_line . "," . a:end_line . "s/.\{" . a:n . "}$//"
手动连接是乏味的。最好使用printf():
下一个问题是,在双引号内,反斜杠必须转义(加倍)。最好使用单引号:
execute printf('%d,%ds/.\{%d}$//', a:start_line, a:end_line, a:n)
最后,Vim有一种特殊的语法将范围传递给函数。请参见:帮助功能范围示例
。您不需要使用它,但它使调用更自然:
:128,203call RLNC(3)
但是,我可能会继续定义一个包装函数的自定义命令
:command! -range -nargs=1 RLNC call RLNC(<args>, <line1>, <line2>)
:命令-范围-nargs=1 RLNC调用RLNC(,)
如果您的函数实际上并不更复杂,我们现在可以将其内联并完全删除该函数:
:command! -range -nargs=1 RLNC execute printf('%d,%ds/.\{%d}$//', <line1>, <line2>, <args>)
:命令-范围-nargs=1 RLNC执行printf(“%d,%ds/\{%d}$/',)
(请注意,如果没有函数,最后一个搜索模式将被删除。)错误是:
E15: Invalid expression: . a:start_line . "," . a:end_line . "s/.\{" . a:n . "}$//"
所以,第一个周期是可疑的。:execute
命令接受(一个或多个)表达式。通过
进行的字符串连接仅在字符串之间进行,而不是在开始时进行
只需停止第一个
:
execute a:start_line . "," . a:end_line . "s/.\{" . a:n . "}$//"
手动连接是乏味的。最好使用printf():
下一个问题是,在双引号内,反斜杠必须转义(加倍)。最好使用单引号:
execute printf('%d,%ds/.\{%d}$//', a:start_line, a:end_line, a:n)
最后,Vim有一种特殊的语法将范围传递给函数。请参见:帮助功能范围示例
。您不需要使用它,但它使调用更自然:
:128,203call RLNC(3)
但是,我可能会继续定义一个包装函数的自定义命令
:command! -range -nargs=1 RLNC call RLNC(<args>, <line1>, <line2>)
:命令-范围-nargs=1 RLNC调用RLNC(,)
如果您的函数实际上并不更复杂,我们现在可以将其内联并完全删除该函数:
:command! -range -nargs=1 RLNC execute printf('%d,%ds/.\{%d}$//', <line1>, <line2>, <args>)
:命令-范围-nargs=1 RLNC执行printf(“%d,%ds/\{%d}$/',)
(请注意,如果没有函数,最后一个搜索模式将被删除。)错误是:
E15: Invalid expression: . a:start_line . "," . a:end_line . "s/.\{" . a:n . "}$//"
所以,第一个周期是可疑的。:execute
命令接受(一个或多个)表达式。通过
进行的字符串连接仅在字符串之间进行,而不是在开始时进行
只需停止第一个
:
execute a:start_line . "," . a:end_line . "s/.\{" . a:n . "}$//"
手动连接是乏味的。最好使用printf():
下一个问题是,在双引号内,反斜杠必须转义(加倍)。最好使用单引号:
execute printf('%d,%ds/.\{%d}$//', a:start_line, a:end_line, a:n)
最后,Vim有一种特殊的语法将范围传递给函数。请参见:帮助功能范围示例
。您不需要使用它,但它使调用更自然:
:128,203call RLNC(3)
但是,我可能会继续定义一个包装函数的自定义命令
:command! -range -nargs=1 RLNC call RLNC(<args>, <line1>, <line2>)
:命令-范围-nargs=1 RLNC调用RLNC(,)
如果您的函数实际上并不更复杂,我们现在可以将其内联并完全删除该函数:
:command! -range -nargs=1 RLNC execute printf('%d,%ds/.\{%d}$//', <line1>, <line2>, <args>)
:命令-范围-nargs=1 RLNC执行printf(“%d,%ds/\{%d}$/',)
(请注意,如果没有函数,最后的搜索模式将被破坏。)感谢您的回复,我对vim函数和所有内容都是新手。所以我对“
:command!
”以及所有这些都不太了解。因此,我将其作为函数放入/.gvimrc文件中,如下所示:
function RLNC (start_line, end_line, n)
if (a:start_line <= a:end_line)
execute printf(':%d,%ds/.\{%d}$//', a:start_line, a:end_line, a:n)
else
execute printf('Start line %d is more than End line %d ', a:start_line, a:end_line)
endif
endfunction
功能RLNC(起始线、结束线、n)
如果(a:start_line感谢您的回复,我对vim函数和所有内容都不熟悉。因此我对“:command!
”和所有内容不太了解。因此我将其作为函数放在了/.gvimrc文件中,如下所示:
function RLNC (start_line, end_line, n)
if (a:start_line <= a:end_line)
execute printf(':%d,%ds/.\{%d}$//', a:start_line, a:end_line, a:n)
else
execute printf('Start line %d is more than End line %d ', a:start_line, a:end_line)
endif
endfunction
功能RLNC(起始线、结束线、n)
如果(a:start_line感谢您的回复,我对vim函数和所有内容都不熟悉。因此我对“:command!
”和所有内容不太了解。因此我将其作为函数放在了/.gvimrc文件中,如下所示:
function RLNC (start_line, end_line, n)
if (a:start_line <= a:end_line)
execute printf(':%d,%ds/.\{%d}$//', a:start_line, a:end_line, a:n)
else
execute printf('Start line %d is more than End line %d ', a:start_line, a:end_line)
endif
endfunction
功能RLNC(起始线、结束线、n)
如果(a:start_line感谢您的回复,我对vim函数和所有内容都不熟悉。因此我对“:command!
”和所有内容不太了解。因此我将其作为函数放在了/.gvimrc文件中,如下所示:
function RLNC (start_line, end_line, n)
if (a:start_line <= a:end_line)
execute printf(':%d,%ds/.\{%d}$//', a:start_line, a:end_line, a:n)
else
execute printf('Start line %d is more than End line %d ', a:start_line, a:end_line)
endif
endfunction
功能RLNC(起始线、结束线、n)
如果(a):开始线