【问题标题】:Can you have file type-specific key bindings in Vim?你能在 Vim 中拥有特定于文件类型的键绑定吗?
【发布时间】:2011-05-26 03:22:47
【问题描述】:

在我的 .vimrc 文件中,我有一个用于注释的键绑定,它在行首插入双斜杠 (//):

" the mappings below are for commenting blocks of text
:map <C-G> :s/^/\/\//<Esc><Esc>
:map <C-T> :s/\/\/// <Esc><Esc>

但是,当我编辑 Python 脚本时,我想将其更改为 cmets 的 # 符号

我的.vim/ftdetect 文件夹中有一个Python.vim 文件,其中还包含选项卡宽度等设置。 如果可能的话,覆盖键绑定的代码是什么,以便我使用 Python:

" the mappings below are for commenting blocks of text
:map <C-G> :s/^/#/<Esc><Esc>
:map <C-T> :s/#/ <Esc><Esc>

【问题讨论】:

    标签: vim


    【解决方案1】:

    您可以使用:map &lt;buffer&gt; ... 为活动缓冲区创建本地映射。这要求你的 Vim 是用 +localmap 编译的。

    所以你可以做类似的事情

    autocmd FileType python map <buffer> <C-G> ...
    

    【讨论】:

      【解决方案2】:

      我更喜欢将我的配置放在一个文件中,所以我使用 autocmd 方法。

      augroup pscbindings
        autocmd! pscbindings
        autocmd Filetype purescript nmap <buffer> <silent> K :Ptype<CR>
        autocmd Filetype purescript nmap <buffer> <silent> <leader>pr :Prebuild!<CR>
      augroup end
      

      当您获取vimrc 时,Vim 不会清除 set autocmds,因此启动 vim、更改您的 vimrc 中的某些内容并运行 :so ~/.vimrc 将定义 autocmds 两次。这就是使用autocmd! group_name 对绑定进行分组和清除的原因。你可以阅读more here

      由于默认情况下映射应用于每个缓冲区,并且您只想为匹配文件类型的缓冲区更改它们,因此&lt;buffer&gt; 修饰符在那里,将映射限制到本地缓冲区。

      【讨论】:

        【解决方案3】:

        ftdetect 文件夹用于文件类型检测的脚本。文件类型插件必须在 ftplugin 文件夹中。文件类型必须以下列三种形式之一包含在文件名中:

        • .../ftplugin/&lt;filetype&gt;.vim
        • .../ftplugin/&lt;filetype&gt;_foo.vim
        • .../ftplugin/&lt;filetype&gt;/foo.vim

        例如,您可以为 cpp 文件类型映射 cmets,将以下内容放入 .../ftplugin/cpp_mine.vim

        :map <buffer> <C-G> :s/^/\/\//<Esc><Esc>
        :map <buffer> <C-T> :s/\/\/// <Esc><Esc>
        

        【讨论】:

        • 您忘记了&lt;buffer&gt; 部分。
        • 您的回答解决了我的两个问题,每个文件类型的映射以及如何使用映射注释当前行。太好了!
        【解决方案4】:

        对于来这里的人来说,这只是部分答案,无法让任何 ftplugin 脚本正常工作,但记住您的 .vimrc(或它来源的文件)应该包含

        filetype plugin on
        

        :filetype plugin on
        

        用于在加载给定类型的文件时执行的文件类型插件。

        【讨论】:

        • 刚刚注意到一些反对意见。很高兴相应地编辑或删除,但我需要先知道原因:/
        【解决方案5】:

        顺便说一句...如果您的主要问题是关于评论...您应该查看“nerdcommenter”插件,这是在 java/c/c++/python/dos_batch_file/etc 等中评论/取消注释您的代码的最快方法。

        【讨论】:

        【解决方案6】:

        我推荐 freitass 建议的 .../ftplugin/&lt;filetype&gt;.vim 方法,但在您的具体情况下,Vim Commentary 将为您解决所有这些问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-24
          • 2014-02-24
          • 1970-01-01
          • 1970-01-01
          • 2012-06-05
          • 1970-01-01
          相关资源
          最近更新 更多