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
。
我想在我的 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
。