vim 不会使用 pathology 重新加载 vimrc

vim 不会使用 pathology 重新加载 vimrc

几乎就是标题。当我编辑我的vimrc文件时,它有一行

call pathogen#infect()

直到我重新启动 vim,更改才会生效。即使我没有文件bundle~/.vim,并且此行位于文件的末尾或开头,情况也是如此vimrc。我想情况不应该如此,那么发生了什么?

编辑以清除内容:

我正在尝试重新加载该.vimrc文件,:source $MYVIMRC当我不使用这条pathogen线尝试时,它会成功。

编辑:一些细节

这是在新安装的 Linux mint 上,问题出现在我多次尝试:noremap、和:iabbreviate命令时。改变外观的命令(例如set number似乎有效)

编辑:更多细节

.vimrc以下是我的文件无法使用的示例

:set number! " To indicate that I do reload the file

" replacing gamma with \gamma, was here when opened gvim
:autocmd FileType tex :iabbrev <buffer> gamma \gamma
" replacing lambda with \lambda added after launching gvim
:autocmd FileType tex :iabbrev <buffer> lambda \lambda

call pathogen#infect()

添加 lambda 文件,然后在后台打开文件运行,输入时没有任何效果source ~/.vimrc。我不得不重新启动 gvim。texlambda

答案1

您的迫切问题

当设计的事件被触发时,自动命令的右侧就会执行。

在您的情况下,FileType当 Vim 确定缓冲区的文件类型时会触发该事件,这通常在创建新缓冲区时发生。

因为执行 时文件已经加载:source ~/.vimrc,所以不会执行任何自定义自动命令。要使它们应用于当前缓冲区,您需要使用 强制重新加载:edit

更广泛的问题

FileType向你的 Vim添加自动命令vimrc并不是一个好主意,因为已经为您完成所有工作!当它确定当前缓冲区具有 FileType 时,Vim 会立即尝试在以下目录中tex查找它可以找到的每个文件,tex.vim为了

1. ~/.vim/ftplugin/
2. $VIMRUNTIME/ftplugin/
3. ~/.vim/after/ftplugin/

因为 Vim 无论如何都会尝试获取这些文件,所以没有必要在你的文件中添加第二次(和第三次、第四次……)检查vimrc。 其中一个文件是你应该放置自定义设置和映射的地方。

第一个,~/.vim/ftplugin/tex.vim来源于全局 ftplugin,因此可以被覆盖。此文件不是存放您的设置的安全位置。

更改全局 ftplugin$VIMRUNTIME/ftplugin/tex.vim是大忌(更新后无法继续存在、不能保证能正常工作、可能需要管理权限等)。

剩下的就是最后一个,这是~/.vim/after/ftplugin/tex.vim您自定义映射的理想位置tex

iabbrev <buffer> gamma \gamma
iabbrev <buffer> lambda \lambda

答案2

我不确定你的问题与病原体有何关系,但你应该检查以下几点:

  1. 如果你打算重新加载你的 vimrc,你应该使用自动命令组,如 中所述:help autocmd-groups。在当前形式下,你的 FileType 事件很快就会变得混乱 - 尝试重新加载你的 vimrc 几次,然后执行:au FileType tex

  2. 请注意,您不是直接创建缩写,而是创建自动命令,而自动命令又会创建缩写。仅更新 vimrc 是不够的,必须执行自动命令才能更新映射/缩写。您可能看不到更新,因为 Filetype 事件通常针对给定缓冲区触发一次。您可以通过echom在自动命令中包含命令来检查这一点(顺便说一句,:vimrc 上各行开头的 是没有意义的;如果您真的喜欢它们,您应该将其包含在 上call pathogen...以保持一致)。您可以尝试删除缓冲区:bd,然后再次打开它,或者只需再次设置文件类型(:set ft=tex)。

  3. 当你打算改变特定文件类型的行为时,可以通过在 after 目录中创建一个文件来避免使 vimrc 混乱,如中所述:h after-directory。例如,创建包含特定映射/缩写的文件 ~/.vim/after/ftplugin/tex.vim。

相关内容