如何根据Vim中的文件类型加载设置?

如何根据Vim中的文件类型加载设置?,vim,Vim,假设我有两组设置,一组用于编写,另一组用于编程。如何修改我的.vimrc,以便在处理扩展名为.md的文件时加载第一组,而在处理扩展名为html/js/css的文件时加载第二组?使用自动命令。例如,以下是my ~/.vimrc的设置: 使用setlocal而不是set,因此仅影响与文件名模式匹配的缓冲区。否则,每次加载*.foo文件时,对shiftwidth等选项的更改将影响所有缓冲区 \是,它允许您将单个命令拆分为多行以增加可读性 |字符是用于在一行中将多个命令链接在一起的 有关详细信息,请参阅

假设我有两组设置,一组用于编写,另一组用于编程。如何修改我的.vimrc,以便在处理扩展名为.md的文件时加载第一组,而在处理扩展名为html/js/css的文件时加载第二组?

使用自动命令。例如,以下是my ~/.vimrc的设置:

使用setlocal而不是set,因此仅影响与文件名模式匹配的缓冲区。否则,每次加载*.foo文件时,对shiftwidth等选项的更改将影响所有缓冲区

\是,它允许您将单个命令拆分为多行以增加可读性

|字符是用于在一行中将多个命令链接在一起的


有关详细信息,请参阅。

使用自动命令。例如,以下是my ~/.vimrc的设置:

使用setlocal而不是set,因此仅影响与文件名模式匹配的缓冲区。否则,每次加载*.foo文件时,对shiftwidth等选项的更改将影响所有缓冲区

\是,它允许您将单个命令拆分为多行以增加可读性

|字符是用于在一行中将多个命令链接在一起的

请参阅以了解更多信息。

不过:基于文件类型的AutoCMD对于~/.vimrc来说是一种快速简便的方法。@andrewdotn建议,Vim对此有一个适当的抽象:文件类型插件

将设置和缓冲区本地映射放入~/.vim/after/ftplugin/{filetype}.vim。这要求您具有:打开文件类型插件;使用after目录可以覆盖$VIMRUNTIME/ftplugin/{filetype}.vim所做的任何默认文件类型设置。

尽管:基于文件类型的autocmd是~/.vimrc的一种快速简便的方法。@andrewdotn建议,vim对此有一个适当的抽象:文件类型插件


将设置和缓冲区本地映射放入~/.vim/after/ftplugin/{filetype}.vim。这要求您具有:打开文件类型插件;使用after目录可以覆盖$VIMRUNTIME/ftplugin/{filetype}.vim完成的任何默认文件类型设置。

@andewdotn非常感谢!一个问题:设置是否需要设置为setlocal?它们可以被设置为set吗?对不起,我对vimscript不是很熟悉。是否有必要将这些设置包装在条件块或其他内容中?我通常认为设置如下:使用set设置expandtab。如果不使用setlocal,则该设置将应用于所有缓冲区,如果打开多个文件,这将非常烦人。看:他是本地人。你不需要把它包在一块或任何东西里;仅当文件名与模式匹配时,才会应用相应的设置。谢谢。在您的示例中,我现在的意思是,我不知道setlocal如何与autocmd BufRead、BufNewFile连接。似乎setlocals是嵌套在里面的?你能把这个例子扩展到包含一个或多个设置吗?哦,我看到这行开头的\是一个。从技术上讲,这与编写autocmd BufRead、BufNewFile*.js、*.html setlocal indentkeys=是一样的^F、 o全部放在一行中,在下一行的开头使用\更具可读性和习惯性。请注意,vimscript语法实际上是在中定义的。@andewdotn非常感谢!一个问题:设置是否需要设置为setlocal?它们可以被设置为set吗?对不起,我对vimscript不是很熟悉。是否有必要将这些设置包装在条件块或其他内容中?我通常认为设置如下:使用set设置expandtab。如果不使用setlocal,则该设置将应用于所有缓冲区,如果打开多个文件,这将非常烦人。看:他是本地人。你不需要把它包在一块或任何东西里;仅当文件名与模式匹配时,才会应用相应的设置。谢谢。在您的示例中,我现在的意思是,我不知道setlocal如何与autocmd BufRead、BufNewFile连接。似乎setlocals是嵌套在里面的?你能把这个例子扩展到包含一个或多个设置吗?哦,我看到这行开头的\是一个。从技术上讲,这与编写autocmd BufRead、BufNewFile*.js、*.html setlocal indentkeys=是一样的^F、 o全部放在一行中,在下一行的开头使用\更具可读性和习惯性。注意,vimscript语法实际上是在中定义的。
autocmd BufRead,BufNewFile *.js,*.html
      \ setlocal indentkeys=!^F,o
autocmd BufRead,BufNewFile *.md
      \ setlocal filetype=markdown | syntax clear