开发者

vim: how to select pasted block

Is there a 开发者_如何学运维vim command to directly select a block of text which has just been pasted?

ps. I know about gv to reselect a block after exiting visual mode. It doesn't apply to this case.


If you want to select it just after paste (before you change anything else), use

nnoremap <expr> gV    "`[".getregtype(v:register)[0]."`]"

. [ and ] marks point to start and end of the last change, v:register is set to the last register used (which is register used for the paste command unless you, for example, yank something), [0] selects only first byte of register type (it is required because for blockwise register it returns <C-v>{width}) and register type is one byte which is just the same as the keystroke you should use in normal mode to invoke visual mode.

I saw this solution somewhere on SO, you may want to search for it in order to get some alternatives.


In my case I have this map:

:nnoremap gp `[v`]

After more research I think the better solution is: " https://vim.fandom.com/wiki/Selecting_your_pasted_text

nnoremap <expr> gp '`[' . strpart(getregtype(), 0, 1) . '`]'


I have had the following maps in my vimrc forever:

nnoremap <leader>p `[V`]
nnoremap <leader>[ `[V`]<
nnoremap <leader>] `[V`]>

They do the following:

  • visually select the recently pasted block
  • de-indent the recently pasted block
  • indent the recently pasted block

I probably use the indent ones even more than the selection one.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜