[英]Is there a way to add custom keyboard shortcuts to Vim for running numerous commands?
我遇到了以下問題 - 每當我在Vim中編寫一些C ++代碼並希望編譯並運行它時,我必須:
:w
:! g++ *.cpp -o programName; ./programName
:! g++ *.cpp -o programName; ./programName
:! 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
文件,( 不需要手動正則表達式 )。
nmap
- 用於在正常模式下映射鍵。
buffer
- 用於當前緩沖區( 在多次拆分的情況下 )。
<F5>
- 用於映射“F5”鍵。
執行的命令是:w | !g++ -o %:r % && ./%:r<CR>
: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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.