是否有一种方法可以在Vim中添加自定义键盘快捷键来运行大量命令?

Is there a way to add custom keyboard shortcuts to Vim for running numerous commands?

本文关键字:快捷键 键盘 自定义 添加 运行 命令 Vim 一种 方法 是否      更新时间:2023-10-16

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

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

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

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

可以使用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文件,(无需手动regex)。nmap -在正常模式下用于映射键。
buffer -用于当前缓冲区(在多次分割的情况下)。<F5> -用于映射'F5'键。
执行的命令是::w | !g++ -o %:r % && ./%:r<CR>

上述命令中,%为文件名(,扩展名为), %:r为文件名(,不扩展名为),
<CR>为回车键(回车)

加速使用

如果您设置了:set autowrite, Vim将在调用外部命令(:!)之前自动持久化源文件。

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

然而,这是不可伸缩的,所以您最好使用映射

<标题> 映射

由于这是特定于c++的,我建议您在文件类型插件:

中定义一个缓冲区本地映射

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

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

  • 你应该使用:noremap;它使映射不受重新映射和递归的影响。
  • :update:write的一个变体,它只在确实存在未持久的更改时执行写操作;因此,它的效率略高。
  • 对于%:r占位符(使映射独立于当前文件名),请参见:help cmdline-special