如何在一行上定义 vim 函数?

Tyl*_*ick 4 vim

由于|用于分隔命令,我想我可以这样做:

:function! SomeFunc() | return 0 | endfunction
Run Code Online (Sandbox Code Playgroud)

当我在单独的行上输入它时它工作正常(输入第一行会导致它提示输入剩余的行):

:function! SomeFunc()
  return 0
endfunction
Run Code Online (Sandbox Code Playgroud)

我现在看到这个警告:help :bar

这些命令看到“|” 作为它们的参数,因此不能跟另一个 Vim 命令:

:功能

有什么办法吗?

我看到哪里说了...

您还可以使用与“|”相同的方式来分隔命令。要插入一个使用 CTRL-V CTRL-J。将显示“^@”。

但这也不起作用:

:function! SomeFunc() <NL> return 0 <NL> endfunction
Run Code Online (Sandbox Code Playgroud)

它给出了这个错误:

E488: Trailing characters
Run Code Online (Sandbox Code Playgroud)

如果我手动输入 CTRL-V CTRL-J 序列,这会起作用:

:function! SomeFunc() ^@ return 0 ^@ endfunction
Run Code Online (Sandbox Code Playgroud)

但这仍然不是一个可接受的解决方案,因为我希望能够简单地复制并粘贴function!命令并按 Enter ...

小智 5

一种选择是使用exe

exe ":function! SomeFunc() \n return 0 \n endfunction"
Run Code Online (Sandbox Code Playgroud)

这些\n字符被双引号字符串解释为换行符。这确实意味着您应该小心转义任何特殊序列。

那说,

我希望能够简单地复制和粘贴功能!命令并按 Enter...

正如 romainl 所说,您的最终目标尚不清楚。如果您出于某种原因经常这样做,也许有更好的方法来获得您想要的东西。最好根据您需要此功能的原因来描述您的问题。