【问题标题】:Is there a way to add custom keyboard shortcuts to Vim for running numerous commands?有没有办法为 Vim 添加自定义键盘快捷键以运行大量命令?
【发布时间】:2017-02-19 21:56:36
【问题描述】:

我遇到以下问题 - 每当我在 Vim 中完成一些 C++ 代码并想要编译和运行它时,我必须:

  1. 退出插入模式
  2. 使用命令:w保存文件
  3. :! g++ *.cpp -o programName; ./programName以便立即编译和运行

在输入最后两个命令一次后,我显然利用键盘上的上箭头键来获取最后几个命令,而不是在以后的编译和运行中一次又一次地写下来。

但对我来说还是有点慢。所以我想知道是否有某种方法可以创建一个键盘快捷键来输入最后两个命令,甚至同时完成所有三件事!

【问题讨论】:

    标签: c++ vim compilation shortcut


    【解决方案1】:

    您可以使用map 将键映射到命令。 nmap 用于普通模式,imap 用于插入模式等

    map <key> command
    

    你提到的cpp 编译应该是这样的:

    autocmd FileType cpp nmap <buffer> <F5> :w<bar>!g++ -o %:r % && ./%:r<CR>
    

    将此命令添加到您的 vimrc 并编译并运行当前 cpp 文件。

    FileType cpp- 直接检测 cpp 文件,(无需手动正则表达式 em>)。
    nmap- 用于在普通模式下映射键。
    buffer- 用于当前缓冲区(在多次拆分的情况下)。
    @987654332 @- 用于映射“F5”键。
    而执行的命令是::w | !g++ -o %:r % &amp;&amp; ./%:r&lt;CR&gt;

    在上述命令中,% 是文件名(带扩展名),而%:r 是文件名(不带扩展名),
    &lt;CR&gt; 代表“回车”按钮(回车

    【讨论】:

    • 添加后 - autocmd FileType cpp nmap :w!g++ -o %:r % && ./%:r到我的 .vimrc 并在 .cpp 文件中按 F5,没有任何反应。有什么建议吗?
    • 上述方法的一个缺陷是你应该确保你是从它所在的目录而不是从其他目录打开文件,例如:vim path/to/file不推荐,cd path/to/dir,@ 987654339@,这个比较好。
    • 是的,我总是这样。
    • 这是你映射键的方式,它应该可以工作,也许尝试重新启动 vim,我猜。
    • autocmd 是什么意思?还有你所说的 是什么意思而要执行的命令是: :w | !g++ -o %:r % && ./%:r?我每次都必须手动执行吗?我只需要将 autocmd 开头的行添加到我的 .vimrc 中吗?
    【解决方案2】:

    加速你使用过的东西

    如果你:set autowrite,Vim 会在调用外部命令 (:!) 之前自动保存源文件。

    您可以通过:!!(旧的 vi 技巧)重复最后一个外部命令,或 / 然后通过@: 重复最后一个 Ex 命令(仍然少按两次键)。

    但是,这无法扩展,因此使用 映射 可能会更好。

    映射

    由于这是特定于 C++ 的,我建议您在 filetype 插件中定义一个缓冲区本地映射

    您可以通过添加:autocmd Filetype cpp ... 为某些文件类型定义它,并将其放入您的~/.vimrc。但是,当您为各种文件类型添加映射和其他设置时,这会变得笨拙。最好将命令放入~/.vim/ftplugin/cpp_mappings.vim。 (这要求您拥有:filetype plugin on。)

    nnoremap <buffer> <F5> :update<Bar>!g++ -o %:r % && ./%:r<CR>
    

    注意事项

    • You should use :noremap;它使映射不受重映射和递归的影响。
    • :update:write 的变体,仅在确实存在未持久更改时才执行写入;所以,它的效率略高。
    • 对于%:r 占位符(使映射独立于当前文件名),请参阅:help cmdline-special

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 2012-08-28
      • 2012-07-03
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 2013-11-23
      相关资源
      最近更新 更多