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):开始线