有没有更好的方法根据文件类型映射命令调用[重复]

2023-11-30

从 Notepad 和 Notepad++ 切换到 vim 后,我才开始接触 vim,但在过去的四个月里我一直只使用它。在我的 .vimrc 中,我有一个命令可以根据文件扩展名自动更改命令调用。例如,如果我正在编辑 R 文件,我可以按<F5>然后 vim 执行!Rscript %:p<cr>,但是如果我切换到 python 文件并按<F5>,vim执行!python %:p<cr>。我通过将以下内容放入我的 .vimrc 中来实现此目的:

    autocmd BufRead *.R noremap <F5> :!Rscript %:p<cr>
    autocmd BufRead *.pl noremap <F5> :!perl %:p<cr>
    autocmd BufRead *.py noremap <F5> :!python %:p<cr>

我想知道这是否是基于命令调用执行它的“正确”vim 方式。我知道我使用的一些 python 文件没有 *.py 扩展名,因此该设置在这种情况下毫无用处。


你需要做两件事:

  • 使用以下命令创建特定缓冲区的本地映射<buffer>选项noremap.
  • 仅加载特定文件类型的映射。

这可以通过autocmd and FileType事件在你的.vimrc像这样:

autocmd FileType perl noremap <buffer> <F5> :!perl %:p<cr>

另一种方法是创建文件类型插件。 (看:h ftplugin更多细节)

一个简单的例子是创建一个名为的文件,~/.vim/ftplugin/perl.vim并将您的映射放入其中,如下所示:

nnoremap <buffer> <F5> :!perl %:p<cr>

我个人更倾向于 ftplugin 方法,但你的一切都在.vimrc文件可以很好。

如需更多帮助,请参阅:

:h :au
:h FileType
:h map-local
:h ftplugin
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有更好的方法根据文件类型映射命令调用[重复] 的相关文章

  • 有没有办法用 Vim 自动重新格式化大括号?

    我想重新格式化一些代码 如下所示 if cond foo to if cond foo 由于这是C代码 所以我一直在看cindent cinoptions与使用 但它似乎不处理多行规则 我一直在看formatoptions与使用gq 而且似
  • 在 VIM 中缩进文件夹中的所有文件

    我有一个包含数百个 TTL TeraTermLanguage 文件的文件夹 现在我想缩进所有这些文件 我已经创建了用于缩进的 teraterm vim 并使用 VIM 打开一个文件并执行 gg G 整个文件得到了正确的缩进 但是有什么方法可
  • Vim 中的空格作为制表符和退格键行为

    在我的 vimrc 中我有 set shiftwidth 4 set tabstop 4 set expandtab 当我点击 Tab 按钮时 设置为使用 4 个空格而不是 Tab 但是当我在 Tab 之后按退格键时 我需要退格所有 4 个
  • Foldmethod=同时标记和语法?

    同一文件是否可以根据标记和语法使用折叠 Since foldmethod一次只能设置为一个 我认为您真正可以做到这一点的唯一方法是使用 set foldmethod expr并与foldexpr 即使如此 我也不确定它是否能够完全按照您的要
  • 如何使用 tmuxinator 在 tmux 中拆分水平窗格内的两个垂直窗格

    目前我的 tmuxinator yml 文件中有这个 windows editor layout main horizontal panes vim server rails s 这给了我两个窗口 一个用于编辑器 另一个用于服务器 在编辑器
  • vim 映射键不起作用

    我一直在尝试映射 ctrl 来在 vim 的插入模式下保存 它似乎永远不起作用 http vim wikia com wiki Map Ctrl S to save current or new files http vim wikia c
  • svn:使用vim合并冲突

    我正在尝试看看如何使 svn 中的合并变得容易 This page http svnbook red bean com en 1 7 svn advanced externaldifftools html提到可以使用外部工具进行合并 vim
  • git 提交消息的 vim 语法高亮显示 - 自定义 commentchar

    如上所述在这个答案中 https stackoverflow com a 14931661 835945 从 Git 1 8 2 开始你可以使用core commentchar配置值将提交消息注释更改为默认值以外的其他内容 哈希标记或哈希符
  • Linux 上 的默认键绑定是什么? Mac 将此绑定到命令

    Vim 的一些示例设置 例如janus https github com carlhuda janus 将命令键绑定到某些命令 例如 Command Shift F for Ack map
  • VIM 始终使用选项卡式页面

    我想要一个可以放入 vimrc 文件中的命令 该命令将使 vim 始终以选项卡式页面模式打开 而无需传递 p在命令行上 有这样的命令吗 如果没有 是否有更好的方法来做到这一点 目前 我正在使用 alias vi vim p 在我的 bash
  • Alt 键快捷键在使用 Vim 的 gnome 终端上不起作用

    我在 gnome 终端上运行 Vim 但 alt 键映射不起作用 例如 imap
  • 尝试安装已安装 vimballPlugin 的 vimball

    我想安装这个plugin http www vim org scripts download script php src id 16854 所以首先我提取 zip 的内容 然后执行以下操作 vim camelcasemotion vba
  • Ubuntu 上的 Vim:文本渲染错误,奇怪地重复和消失

    不久前我在 ubuntu 12 04 上安装了 vim 有时 当我在代码上运行光标 使用键盘 而不是鼠标 时 文本会消失 就好像渲染字符时出现问题一样 当我再次运行光标时 它通常会重新出现 这似乎是随机发生的 但通常足以让人恼火 为了更清楚
  • vim 中的正则表达式查找和替换:向数字添加 .0

    我有一个如下所示的文件 1 1 0 1 6 1 0 2 8 1 0 3 10 1 0 4 12 1 0 6 如何为所有数字添加 0 后面的数字除外 我认为用正则表达式来做到这一点应该不会太难 但是我的正则表达式知识太生疏了 使用 VIM s
  • 将回车 ^M 替换为 Enter

    我知道如何删除 M在我的文件中 s M g 但这只是我想替换的一行 Mwith Enter VIM 中的 Enter 字符是什么 在命令行模式下使用 替换回车符 即
  • 如何让 Vim 突出显示非 ascii 字符?

    我试图让 Vim 突出显示非 ASCII 字符 是否有可用的设置 正则表达式搜索模式或插件来执行此操作 在 a 中使用范围 搜索中的字符类 您应该能够excludeASCII 十六进制字符范围 因此突出显示 假设您有hlsearch启用 所
  • 如何在 Vimscript 中获取光标下的单词和当前行的文本?

    我正在写一个 Vim 脚本 如何获取光标下的单词和当前行的文本 你可以与expand https vimdoc sourceforge net htmldoc eval html expand and getline https vimdo
  • 终端 vim 中的语法高亮显示,但 gVIM 中没有

    我目前在终端中使用 VIM 并且有完美的语法突出显示 但是当我尝试使用 gvim 时 无论什么类型的文件或输入多少次 syntax on 我都没有得到任何语法突出显示 有人有什么想法吗 谢谢 这是我的 vimrc 供感兴趣的人使用 Turn
  • 如何在 Vim 中创建行号和文本之间的边框

    我希望在行号右侧和文本左侧有一条细边框线 您可以使用不同的颜色来突出显示LineNr 例如 hi LineNr cterm bold ctermbg gray ctermfg black gui bold guibg gray guifg
  • MacVim:跨窗口共享命名寄存器?

    我想跨 MacVim 窗口共享命名寄存器缓冲区 就像我在单个实例中跨缓冲区一样 换句话说 假设我标记了一个位置 m 然后去其他地方 我将一些文本拉入寄存器 a 从当前点到 m a m 然后我转到另一个窗口 不 我不是指同一窗口中的另一个分割

随机推荐