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 所指出的,我真正想做的是丢弃当前缓冲区而不保存更改

4

1 回答 1

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
于 2013-07-12T08:17:21.473 回答