我遇到了以下问题 - 每当我在Vim中编写一些C ++代码并希望编译并运行它时,我必须:
:w
:! g++ *.cpp -o programName; ./programName
以便立即编译和运行在输入最后两个命令之后,我显然使用键盘上的上箭头键来获取最后几个命令,而不是在将来的编译和运行中一次又一次地写下它们。
但它对我来说仍然很慢。所以我想知道是否有某种方法可以创建一个键盘快捷键来输入最后两个命令,甚至可以同时完成所有这三个操作!
答案 0 :(得分:7)
您可以使用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
文件,(无需手动正则表达式)。
nmap
- 用于在正常模式下映射键
buffer
- 对于当前缓冲区(,如果有多个拆分)
<F5>
- 用于映射&#39; F5&#39;键。
执行的命令是::w | !g++ -o %:r % && ./%:r<CR>
在上面的命令中,%
是文件名(扩展名为),而%:r
是文件名(没有扩展名) ,<CR>
代表&#34;输入&#34;按钮(回车)
答案 1 :(得分: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>
:noremap
;它使映射不受重映射和递归的影响。:update
是:write
的变体,只有在确实存在无法更改时才执行写入;所以,效率稍高。%:r
占位符(使映射独立于当前文件名),请参阅:help cmdline-special
。