作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 VSCode 中,您可以使用 Alt+Shift + 向上或向下复制并粘贴选定的文本行。
几个月前我转用了 vim,我真的很怀念这个功能。我发现您可以使用这些视觉模式绑定(bind)在视觉模式下向上或向下移动选定的行,
vnoremap J :m '>+1<CR>gv=gv
vnoremap K :m '<-2<CR>gv=gv
但如果您也可以在不使用 yy 和 p 的情况下上下复制和粘贴,那就太好了,因为当您完成拉动时,光标将放置在初始位置,退出可视模式并降低工作效率。
最佳答案
嗯,这就是从互联网上复制和粘贴随机片段而不了解它们的作用的问题:它们是小黑匣子,由于缺乏知识而无法随意修改或扩展。
让我们解构第一个映射:
vnoremap J :m '>+1<CR>gv=gv
:[range]m {address}
移动 [range]
覆盖的行到下面的线{address}
。这里,范围是由 Vim 自动注入(inject)的: '<,'>
意思是“从最新视觉选择的第一行到最后一行”,地址是'>+1
,意思是“最新视觉选择的最后一行+1行”。所以:'<,'>m '>+1<CR>
有效地将所选行移动到其下方,gv
重新选择最新的视觉选择,=
缩进,gv
再次重新选择它以进一步 J
或K
现在,我们想要一个类似的映射,但要复制给定的行。也许我们可以从 :help :m
开始并滚动?
果然我们找到了:help :copy
就在上面:help :move
,我们可以立即尝试:
xnoremap <key> :co '>+1<CR>gv=gv
嗯,它并没有真正按照我们想要的方式工作,但这是可以预见的:
我们可以通过删除 +1
来解决第一个问题:
xnoremap <key> :co '><CR>gv=gv
并通过选择复制的行而不是重新选择最新的选择来修复第二个:
xnoremap <key> :co '><CR>V'[=gv
参见:help :copy
和:help '[
.
关于vim - 有没有办法在vim中向上或向下复制选定区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69264441/
我是一名优秀的程序员,十分优秀!