创建通用映射以关闭当前缓冲区而不保存更改

时间:2013-07-12 07:45:42

标签: vim

我正在尝试向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 个答案:

答案 0 :(得分:2)

作为帮助状态,:enew!会丢弃对当前缓冲区所做的更改。相反,您可以在vimrc中使用:hide enew或许多用户更喜欢的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