微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

vim – 如何在创建必要的行时粘贴块以仅为块提供空间?

在VIM中,文本块在可视模式下阻塞,然后粘贴块,将其粘贴到光标给出的所需列之后,但粘贴就地,覆盖当前行和后续行的内容.

有时我不想要这个,我想要的是粘贴一个带有光标位置给出的缩进的块,但粘贴在新的空行内,而不覆盖文本.

有没有办法做到这一点?

目前,要实现这一点,我创建了大量空行,消除了剩余的空行(不是很聪明……).

注意:我使用set virtualedit = all来粘贴所述空行中的任何列.

您可以尝试以下内容.无论您的领导关键是什么,按块方式拉动某些东西,定位光标并点击< leader> p.
function! FancyPaste()
    let paste = split(@",'\n')
    let spaces = repeat(' ',col('.')-1)
    call map(paste,'spaces . v:val')
    call append(line('.'),paste)
endfunction

nnoremap <leader>p :call FancyPaste()<CR>

您当然可以将映射更改为您想要的任何内容;这只是一个建议.

更新:这是一个接受参数的版本.这就是你,例如改为从系统剪贴板粘贴.它还使用virtcol()而不是col()来考虑’virtualedit’的可能用途:

function! FancyPaste(reg)
    let paste = split(getreg(a:reg),virtcol('.')-1)
    call map(paste,paste)
endfunction

nnoremap <leader>p  :call FancyPaste('"')<CR>
nnoremap <leader>cp :call FancyPaste('+')<CR>

请记住,它只会缩进空格而不是制表符.使用适当数量的选项卡(以及需要时的空格)缩进将需要一些额外的代码行,但是非常可行.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐