如何在Vim/Nvim中对不同长度行块进行复制粘贴编辑?
在Vim/Neovim中实现多行SQL列的批量格式化
不用复杂正则,有两种简单的操作方式可以实现你要的效果——把单列名改成sum(列名) as 列名的格式:
方法一:块可视化+复制粘贴组合操作
假设你的初始SQL列是这样的:
user_id
order_amount
total_price
操作步骤:
- 光标移到第一行开头,按
Ctrl+v进入块可视化模式,上下移动光标选中所有需要处理的行。 - 按大写
I进入行首插入模式,输入sum(,按Esc,所有行的开头都会自动加上sum(。 - 再次用
Ctrl+v选中所有行的末尾(可以先按$跳到第一行尾,再上下选行),按大写A进入行尾插入模式,输入) as,按Esc,现在每行变成sum(user_id) as这样的格式。 - 再次进入块可视化模式,选中所有行里的原始列名(比如从
sum(后面到)前面的部分),按y复制。 - 最后用
Ctrl+v选中所有行的) as后面的空白位置,按p粘贴,所有行就变成sum(user_id) as user_id了。
方法二:宏录制快速重复操作
如果行数较多,宏录制会更高效:
- 光标定位到第一行开头,按
q q(第一个q是开始录制,第二个q是指定寄存器)。 - 依次执行:
yiw:复制当前列名(Vim会自动识别下划线连起来的单词)I sum(:行首插入sum(,按Esc退出插入模式$ a ) as:跳到行尾,插入) as,按Escp:粘贴刚才复制的列名j:跳到下一行,准备处理下一个
- 按
q停止录制。 - 现在按
@ q就能处理下一行,要是有N行需要处理,按N@q直接批量执行(比如已经处理了第一行,剩下3行就按3@q)。
内容的提问来源于stack exchange,提问作者Chinwobble
相关产品推荐
相关产品推荐

