2013-07-12 23 views
0

我試圖添加一個映射到vimrc所以如果我按\r當前緩衝區將關閉而不保存更改。我認爲:enew!是想什麼,我要地圖,我已經做了它的方式是錯誤的:創建通用映射關閉當前緩衝區而不保存更改

" Use Leader-r for closing the buffer without saving changes, also in Insert mode 
nnoremap <Leader>r :<C-U>enew!<CR> 
vnoremap <Leader>r :<C-U>enew!<CR>gv 
cnoremap <Leader>r <C-C>:enew!<CR> 
inoremap <Leader>r <C-O>:enew!<CR> 

如何修改上面的?

編輯:由於GLTS指出的是什麼其實我喜歡做的是放棄當前的緩衝區但不改變

+1

「關閉」緩衝你的意思是「刪除」的緩衝區,或者只是「隱藏「目前? – Kent

+0

你的問題到底是什麼?映射工作或多或少都很好。 – glts

+0

@肯定 - 我的誤解 - vim對我來說是新的 - 是的,現在我意識到緩衝區只是實際文件的副本,我想要做的是刪除緩衝區而不保存更改。 – whytheq

回答

2

作爲幫助各國,:enew!丟棄當前緩衝區所做的更改。相反,使用:hide enew或許多用戶更喜歡在您的vimrc中使用set hidden,然後使用:enew

或者你實際上的意思是如何刪除當前緩衝區而不保存更改?在這種情況下,請使用:bd!而不是:hide enew

nnoremap <Leader>r :<C-U>hide enew<CR> 
xnoremap <Leader>r :<C-U>hide enew<CR> 
cnoremap <Leader>r <C-C>:hide enew<CR> 
inoremap <Leader>r <Esc>:hide enew<CR> 

就我個人而言,我會建議不要做這樣的「通用」映射。正常模式映射應該足夠了,因爲無論如何一個Esc會帶你到那裏。


通過@ZyX提出一種先進的解決辦法就是這四條線擠入一個與此位的<C-\><C-N>魔法:

for a in ['n','x','c','i'] | exe a.'noremap <Leader>r <C-\><C-N>:hide enew<CR>' | endfor 
+0

+1謝謝你。如果我想爲':bd!'創建一個正常模式映射,它只是簡單的'nnoremap r: bd! '....或者感嘆號需要在'vimrc'中以不同的方式進行編碼? – whytheq

+0

沒問題。是的,'nnoremap r: bd! '應該像你寫的一樣工作。 – glts

+0

''有什麼作用? ...在原始文章中的一些行有冒號然後,而對於C模式它是後面加':'? – whytheq

相關問題