我已将以下内容写在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()
。