输入以下命令后,Vim 中出现“E488:Trailing Characters”错误:

输入以下命令后,Vim 中出现“E488:Trailing Characters”错误:

我已将以下内容写在vimrc.vim

:filetype plugin on
:let s:save_cpo = &cpo
:set cpo&vim
:let &cpo = s:save_cpo
:set runtimepath = ~/home/nikcha/.vim/plugin
:set fileformat = unix
:function! print_hi()
:echo "Hi..its done"
:endfunction
:map <F7> : call print_hi()<CR>

打开文件并输入:F7该文件时会出现错误E488:Trailing Characters“什么可能出了问题?”

答案1

通过使用:map,您可以使F7映射可供正常、视觉、选择、操作员待定模式。按:,您将进入命令行模式,即不是覆盖。

请参阅:help map-modes参考资料 进行概述。

由于操作员挂起模式非常特殊,并且您的示例函数对选择也没有意义,因此最好通过 . 将其限制为(默认)正常模式:nmap

此外,你应该使用:noremap;它使映射不受重新映射和递归的影响::nnoremap


如果您想要命令行模式的快捷方式,请定义自定义命令反而:

:command! Hi call print_hi()

答案2

冒号

行开头的冒号是可选的。对于脚本,它们通常被省略,因为它使代码更清晰/更易于阅读。冒号但在映射内部需要,如稍后所述。

设置选项值

当您设置诸如fileformat和之类的选项值时,和 值runtimepath之间不能有空格。=它应该是:

set fileformat =unix
" or
set fileformat=unix

请注意,这不是 的情况let,您可以使用它为变量赋值,或者通过引用选项。这些都可以:

let s:foo = "bar"
let &fileformat = "unix"

命名函数

当您编写自己的函数时,名称必须以大写字母开头。在你的情况下类似:

function! Print_hi()
"         |
"         +----------- Capital

兼容模式

您的保存和恢复cpo例程没有多大作用。这“普通的”要做的就是保存它,然后编写脚本,最后恢复它。

let s:save_cpo = &cpo
set cpo&vim

" Rest of script

let &cpo = s:save_cpo

正如您现在的脚本一样,它仅保存它、设置它,然后按相邻顺序恢复它。换句话说,它可以整体省略,或者使用如上所示的模式。

使用此例程的原因是,在您的脚本中,您不知道用户是否处于兼容模式(更像 vi,不太像 vim)。因此,保存模式,将模式设置为vim,最后恢复它是正常的。这样您就可以毫无问题地使用 Vim 特定的功能。

重写的脚本

总的来说,这应该更符合您想要的方向:

let s:save_cpo = &cpo
set cpo&vim

function! Print_hi()
    echo "Hi..its done"
endfunction

map <F7> :call Print_hi()<CR>
"        |
"        +-------------------- Note; here we use colon.

let &cpo = s:save_cpo

映射,E488

其他答案已经给出了足够好的解释为什么你会得到

E488:Trailing Characters

错误。简而言之:当这样映射时,只需按F7。不要先按冒号。 Ingo Karkat 对于要使用的地图功能有一些很好的建议。

映射中的冒号:告诉 Vim 进入命令行模式。然后打印该命令call Print_hi()。最后<CR>添加执行命令行。与Enter手动编写命令相同。实际上,它变成了自动键盘序列。

更有效的写作

一般来说,最好将脚本添加到自己的文件中,然后从.vimrc.本身不编写大量脚本/函数.vimrc。当您编写脚本并想要测试它时,您可以简单地说:

  • :so %Enter

我的 rc 文件中有这些映射以便快速加载:

"^O is CTRL-O (i: Ctrl-V Ctrl-S-O; to prevent cursor movement
" Save + Source
inoremap    <silent>    <C-S-F12>  ^O:w<CR>^O:so %<CR>
nnoremap    <silent>    <C-S-F12>    :w<CR>:so %<CR>
" Source
inoremap    <silent>    <C-F12>  ^O:so %<CR>
nnoremap    <silent>    <C-F12>    :so %<CR>

还有一个仅获取选定代码的功能,但随着这篇文章变得有点长......

答案3

你不应该类型 :<F7>而是按 F7 键。这就是意思:map <F7> : call print_hi()<CR>

:map        # Map the following printable characters:
<F7>        # # How F7 is seen by vim
:           # to
call        # call a function:
print_hi()  # # previously defined function print_hi
<CR>        # and print a new line.

如果您想在可视模式下调用该函数(键入 :bla),则不应使用按键,而应键入:call print_hi()

相关内容