几乎就是标题。当我编辑我的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。tex
lambda
答案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
我不确定你的问题与病原体有何关系,但你应该检查以下几点:
如果你打算重新加载你的 vimrc,你应该使用自动命令组,如 中所述
:help autocmd-groups
。在当前形式下,你的 FileType 事件很快就会变得混乱 - 尝试重新加载你的 vimrc 几次,然后执行:au FileType tex
。请注意,您不是直接创建缩写,而是创建自动命令,而自动命令又会创建缩写。仅更新 vimrc 是不够的,必须执行自动命令才能更新映射/缩写。您可能看不到更新,因为 Filetype 事件通常针对给定缓冲区触发一次。您可以通过
echom
在自动命令中包含命令来检查这一点(顺便说一句,:
vimrc 上各行开头的 是没有意义的;如果您真的喜欢它们,您应该将其包含在 上call pathogen...
以保持一致)。您可以尝试删除缓冲区:bd
,然后再次打开它,或者只需再次设置文件类型(:set ft=tex
)。当你打算改变特定文件类型的行为时,可以通过在 after 目录中创建一个文件来避免使 vimrc 混乱,如中所述
:h after-directory
。例如,创建包含特定映射/缩写的文件 ~/.vim/after/ftplugin/tex.vim。