是否有一种方法可以在Vim中添加自定义键盘快捷键来运行大量命令?
Is there a way to add custom keyboard shortcuts to Vim for running numerous commands?
我有以下问题-每当我在Vim中写完一些c++代码并想要编译和运行它时,我必须:
- 退出插入模式
- 使用命令
:w
保存文件 - 写入
:! 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
。
- 如何覆盖Windows键盘快捷键
- 如何在子类化控件中使用快捷键表?
- 是否有任何快捷键可以插入函数的定义
- C++ i+=1 的快捷键到 i=i+1
- 菜单打开时,菜单中的C QT操作不会由键盘快捷键触发
- 多个快捷键不起作用
- 在Ubuntu中翻译快捷键
- C++QT OSX QT::META+QT:键_Tab快捷键绑定
- 未捕获QT事件筛选器中的键盘快捷键(强制文本为大写)
- QPushButton的全局快捷键
- 记事本++将快捷键"alt+æ"分配给突击队
- 是否可以在Qt中使用带下划线的字母作为键盘快捷键
- Qt将非菜单栏键盘快捷键添加到QMainWindow
- EclipseCDT-键盘快捷键或插件,用于从编译错误中创建新的类和方法
- Qt:Qt应用程序中的键盘快捷键分配(使用"&")是否不适用于Mac OSX?
- C++Qt Q带数字键盘键的快捷键
- 是否有一种方法可以在Vim中添加自定义键盘快捷键来运行大量命令?
- 是否有一些类似于boost program_options的c++库/源代码,但用于*键盘快捷键自动生成帮助*
- 在eclipse中创建自定义键盘快捷键
- 如何在Visual Studio Code中通过键盘快捷键切换头文件/cpp文件