【问题标题】:gVim and multiple programming languagesgVim 和多种编程语言
【发布时间】:2010-11-27 03:10:34
【问题描述】:

我的日常工作是使用 Perl 进行编码。我在家里玩 Python 和 Erlang。对于 Perl,我想用两个空格缩进我的代码。而对于 Python,标准是 4。此外,我还有一些键绑定来打开函数声明,我想将它们用于所有编程语言。如何在 gVim 中实现这一点?

有没有办法为每种编程语言或类似的东西维护一个配置文件?

【问题讨论】:

    标签: python perl editor vim


    【解决方案1】:

    在您的 $HOME 中,创建 .vim/ 目录(或 Windows 上的 vimfiles/),在其中创建 ftplugin/ 目录,并在其中保存名为“perl.vim”或“python.vim”或“html.vim”的文件" 或 ...

    当你打开/创建给定文件类型的新文件时,这些应该会自动加载,只要你不要忘记在你的 .vimrc(或 Windows 下的 _vimrc)中添加:filetype plugin on

    那么,vim 选项应该用:setlocal 定义(而不是:set,否则它们的定义将覆盖默认的全局设置)。

    映射用:n/i/v(nore)map <buffer> 以及缩写定义。命令使用-b 选项定义。没有插件的帮助,菜单无法本地化。

    local<buffer>-b 对于防止副作用很重要。

    【讨论】:

    【解决方案2】:

    您应该能够通过利用文件类型来处理...例如,将其添加到您的 vimrc(并针对不同的语言进行适当修改):

    autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab
    

    【讨论】:

    • 不要覆盖默认设置。使用“setlocal”(或“setl”)而不是“set”。您不希望最后一个 autocmd 的设置进入其他缓冲区。
    • set 命令接受多个选项。所以,写起来更容易:set tabstop=4 shiftwidth=4 expandtab
    【解决方案3】:

    除了 rangerchris 的回答之外,您还可以考虑使用模式行。模型告诉编辑器如何配置自己:

    #!/usr/bin/perl
    # vi: ts=4 sw=4 ht=4 et textwidth=76 :
    
    use strict;
    use warnings;
    
    print "hello world\n";
    

    该模式行告诉 vi 使用 4 个字符的制表符和自动缩进,使用空格而不是制表符,并且当光标到达 76 个字符时应该插入换行符。

    您可以控制 Vim 如何使用两个变量(很可能在您的 .vimrc 中设置)读取模式行:

    set modeline
    set modelines=5
    

    modeline 变量告诉 Vim 查找模式行(如果已设置)。 modelines 变量告诉 Vim 从顶部和底部扫描多少行以查找模式行(在这种情况下,如果模式行位于文件的第一行或最后五行,它将找到它)。

    与任何从不受信任的来源获取指令的系统一样,模式行可以是security threat,因此root 用户不应该使用模式行,您应该保持您的 Vim 副本是最新的。

    模式行的真正好处是它们是每个文件的。大多数 Perl 人是四个空格作为缩进的人,但我是一个八字符制表人。在处理其他人的代码时,我使用反映他们使用情况的模式行。其余时间我用我自己的。

    【讨论】:

      【解决方案4】:

      这就是我的做法。下面是我的.vimrc 的摘录,我为每种语言维护了更多配置,并在加载新缓冲区时加载这些配置。

      " HTML
      autocmd BufNewFile,BufRead *.html,*.htm,*.xhtml source ~/.vimhtml
      " XML
      autocmd BufNewFile,BufRead *.xml,*.xmi source ~/.vimxml
      " Perl
      autocmd BufNewFile,BufRead *.pl,*.pm source ~/.vimperl
      

      请注意,虽然我源文件,但我可以执行任何 VIM 命令,或调用函数。例如为了加载一个新的 Java 文件,我这样做:

      autocmd BufNewFile *.java call GeneratePackage()
      

      GeneratePackage() 是一个 VIM 函数。

      【讨论】:

      • autocmd FileType ... 更好,因为您将文件类型检测(使用 BufNewFile)与针对该类型文件执行的操作分开。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-16
      • 2011-03-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 2018-03-16
      相关资源
      最近更新 更多