5

我在使用函数更新 VIM 中的信息时遇到了麻烦。我的代码如下:

map <F4> :call UpdateTitle()<cr>'s
"Update the latest modification time and filename
function UpdateTitle()
    normal m'
    execute '/# *Last modified:/s@:.*$@\=strftime(": %Y-%m-%d %H:%M")@'
    normal ''
    normal mk
    execute '/# *Filename:/s@:.*$@\=": ".expand("%:t")@'
    execute "noh"
    normal 'k
    echohl WarningMsg | echo "Successful in updating the copyright." | echohl None
endfunction

当我按下F4VIM 时,它确实有效。但它总是将错误消息显示为E20: Mark not set. 我认为错误发生在最后两行。但我找不到解决方案。
我试过了echoerr。它有效,但不是我什么。我一个人尝试echomsgecho。但它不起作用。没有消息输出。但错误消息显示为E20: Mark not set

此外,即使我删除了整个回声线。同样的错误再次出现。

VIM 版本是 7.0.237。

4

2 回答 2

11
E20: Mark not set

通常这意味着你试图跳到一个不存在的标记。

看看你的地图:

map <F4> :call UpdateTitle()<cr>'s

结尾是什么's?你有标记s吗?

  • 此错误消息将清除您的消息(在您的函数中回显)。这就是为什么你看不到它。
  • 该功能有效,因为它发生在您的“错字”之前
于 2013-03-21T17:30:58.377 回答
3

如果您是偶然E20: Mark not set看到的,您可以继续执行您尝试运行的命令。

例如,点击i进入编辑模式,消息将消失。

我试图输入一个反引号`,后跟字母,以为我处于编辑模式,这恰好是您跳转到标记的方式(请参阅使用标记)。

于 2020-05-19T23:58:22.610 回答