vimrc autocmd 运行命令而不是映射

Vimrc autocmd runs command instead of mapping

我想在我的 vim 到 运行 我的 python 文件中添加一个热键,所以我在我的 vimrc 中添加了以下行:

autocmd FileType python map <F5> :w|!python3 %

但是在打开文件而不是 运行ning autocmd 时,它 运行s python 我的文件。

对我来说,这似乎与许多教程关于使用 autocmd 和 map 的建议没有什么不同,所以我想知道这里到底发生了什么,而不是我期望的行为。

您的 :map 命令以命令分隔符 | 结束;当 :autocmd 运行时,余数已经执行。您需要对其进行转义 (\|),或者更好地使用特殊的 <Bar> 字符:

autocmd FileType python nnoremap <buffer> <F5> :w<Bar>!python3 %<CR>

CP。 :help map_bar。另外,you should use :noremap;它使映射不受重新映射和递归的影响。并且(正如@PeterRincker 所建议的那样),使映射缓冲区本地化,以便它仅适用于 Python 缓冲区)。


您的 :autocmd FileType 方法适用于一些映射,但扩展性不佳。如果您的 ~/.vimrc 中有 :filetype plugin on,您可以将我们的映射分解为单独的脚本 ~/.vim/ftplugin/python_mappings.vim