我正在浏览我的vim dotfiles来整理它们.我注意到,随着时间的推移,我以各种不一致的方式添加了各种文件类型特定的设置.让我们假设我正在为Python定制:
au BufRead,BufNewFile *.py (do something).我不喜欢这个,因为一些Python文件可能没有.py终止.
au FileType python (do something).这似乎是一个更好的选择,因为它不依赖于具有.py终止的文件.缺点是Vim不知道某些文件类型.我可以让Vim识别其他文件类型,但我也有各种不一致的方法:.vim/filetype.vim文件,另一个in .vim/after/filetype.vim和各种set filetype命令.vimrc.
添加.vim/ftplugin/python.vim具有特定于文件类型设置的文件.我知道$VIMRUNTIME/ftplugin/python.vim可以覆盖我在这里设置的任何设置.一个问题是,我不知道该如何与交互.vim/filetype.vim和.vim/after/filetype.vim.
添加一个.vim/after/ftplugin/python.vim.我知道这是在之后加载的,$VIMRUNTIME/ftplugin/python.vim所以它可以从那里覆盖设置.和前面的方法一样,我不确定它是如何与filetype.vim文件交互的.
所以我至少有四种方法可以做到这一点,不提及语法文件和特定于文件类型的插件.在我看来,这样做是为了把我的文件类型的特定设置的最佳途径after/ftplugin,使他们不被覆盖,并filetypes.vim在after出于同样的原因.
但是,在我继续之前,我想询问是否有人有关于处理文件类型特定设置的最佳方法的建议.
假设我将.txt文件加载到Vim中.然后我想改变filetype=html但我也想要一个相关的ftplugin加载.我怎样才能做到这一点?
我已经尝试了类似的东西::set filetype plugin on和:set filtype plugin_nameon :filetype plugin_name等等,但我似乎无法手动加载ftplugin.有什么建议?
我试过:filetype=html,然后:filetype plugin on和其他组合无济于事.
编辑:我无法用任何答案"完全"解决这个问题(但它可能与我的配置有关).然而,皮埃尔的答案非常好,所以我给了他绿色的复选标记.
我是Vim的新手,我正试着习惯它.我刚刚创建了一个.vimrc文件,让Vim显示行号并进行增量搜索.我还启用了语法高亮.现在我想启用一些东西来简化HTML编写.我在/ usr/share/vim中搜索了html.vim,发现了这个:
/usr/share/vim/vim72/syntax/html.vim
/usr/share/vim/vim72/ftplugin/html.vim
/usr/share/vim/vim72/indent/html.vim
Run Code Online (Sandbox Code Playgroud)
现在,我需要做些什么来启用HTML自动缩进?将这些文件复制到〜/ .vim?符号链接他们?或者Vim是否自动从/ usr/share/vim /加载它们?(它已经有HTML语法高亮,所以我认为这是可能的 - 但它不会做HTML自动缩进)我听说set autoindent.vimrc会做的伎俩,但是.c文件是什么?我认为他们需要set cindent,但确实使用HTML?
我filetype plugin为一些我添加的rails vim插件打开了,但是这样的副作用似乎是现在所有文件类型都启用了自动更新(例如,如果我#在下一行开始一行,或者Enter在插入模式下或者O等进入插入模式,也会得到a #).
我找到了禁用自动注释的指南formatoptions,并将以下内容添加到我的.vimrc中:
au FileType * setlocal formatoptions-=cro
Run Code Online (Sandbox Code Playgroud)
但是,我仍然遇到问题 - 除非我明确地:source .vimrc(或setlocal ...直接输入),否则它不会生效.我确定是这种情况,因为vim的ftplugins正在用自己的选项覆盖我的选项.
然后我找到了第二个指南,讨论在ftplugin脚本运行后使用after ftplugin脚本进行更改,但是他们的解决方案是为〜/ .vim/after/ftplugin中的每个文件类型创建一个符号链接到中心文件,并且这似乎对我来说很愚蠢.
有没有办法创建一个通用的ftplugin脚本,还是我错误地解决了这个问题?任何帮助,将不胜感激.
我正在使用spf13的vim发行版https://github.com/spf13/spf13-vim.我一直在尝试使用2个空格而不是4个空格用于.js文件,因此我创建了一个js.vimin ~/.vim/ftplugin.我做错了吗?
set shiftwidth=2 " Use indents of 2 spaces
set tabstop=2 " An indentation every two columns
set softtabstop=2 " Use two spaces while editing
Run Code Online (Sandbox Code Playgroud) 我正在学习Vim,我希望通过将F5键映射到由文件类型决定的编译命令来将其设置为IDE.
我的~/.vim/ftplugin/c.vim:
map <F5> :w<CR>:!clang % -o %:r.out && ./%:r.out<CR>
Run Code Online (Sandbox Code Playgroud)
我的~/.vim/ftplugin/cpp.vim:
map <F5> :w<CR>:!clang++ -ggdb -pthread -std=c++11 % -o %:r.out && ./%:r.out<CR>
Run Code Online (Sandbox Code Playgroud)
当我打开一个C++文件(带.cpp扩展名)并点击F5时,执行命令c.vim.为什么会这样?
当我删除文件c.vim,然后Vim加载cpp.vim并按预期工作.
在Google进行一些搜索后,我没有找到任何答案或问题,但希望其他人也能看到此用法。
我认为iabbrevs在工作时提出新的特定文件类型会很不错。然后,您可以将其快速添加到目录中的filetype.vim-file中,ftplugin而不必开始查看文件类型并花费时间来提取正确的ftplugin文件。
我还不擅长自定义vim,但是如果有人可以提供一些建议,那将很酷。
Ubuntu 12.10上的Vim 7.3
我最近从Ubuntu软件中心安装了vim.到目前为止,我已经安装了以下vim插件:NERDTree,rails和ack.
我正在学习python上的课程,另外还有Ruby on Rails上的课程.令我感到惊讶的是,就缩进而言,vim无法识别语言.在这个论坛上检查各种问题和答案,以及检查vim帮助,我看到$ VIMRUNTIME目录中应该有一个名为"ftplugin"的目录.我的$ VIMRUNTIME和$ HOME一样〜/,但我的主目录中没有'ftplugin'.在〜/ .vim中也没有类似的东西.这是否意味着我没有任何文件类型的插件?
如果我不这样做,我在哪里可以获得通常的设置?
ftplugin ×9
vim ×9
file-type ×1
html ×1
indentation ×1
plugins ×1
ubuntu-12.04 ×1
vim-plugin ×1