加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 17:01:48 所属栏目:安全 来源:网络整理
导读:在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>

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读