Vim:如何在粘贴前后对寄存器内容进行排序?
当然可以!在Vim里实现寄存器内容排序再粘贴的方法
完全能做到在粘贴前对寄存器里的内容排序,而且不会干扰文件中的其他行,这里给你两种实用的方案:
方法一:临时缓冲区可视化排序(直观易操作)
这种方法适合需要预览排序结果、或者用复杂规则排序的场景:
- 先把目标行复制到指定寄存器,比如寄存器
a:选中行后执行"ay,或者针对行范围(比如第5到第10行)执行:5,10y a - 打开一个临时空白缓冲区:
:new - 将寄存器
a的内容粘贴进来:"ap - 按你的规则排序:
- 基础字典序排序:
:sort - 按特定模式排序(比如按行首数字):
:sort /^\d+/ - 忽略大小写排序:
:sort i
- 基础字典序排序:
- 把排序后的内容重新复制回寄存器
a:先执行ggVG选中所有行,再执行"ay - 关闭临时缓冲区(无需保存):
:q! - 回到原文件的目标位置,粘贴排序后的内容:
"ap
方法二:表达式寄存器直接处理(高效快捷)
如果不需要预览,直接用Vim的表达式寄存器可以一步完成排序:
- 先把目标行复制到寄存器
a(步骤同方法一) - 执行命令将排序后的内容写回寄存器
a:- 基础字典序排序:
:let @a = join(split(@a, "\n")->sort(), "\n") - 忽略大小写排序:
:let @a = join(split(@a, "\n")->sort('i'), "\n") - 自定义排序规则(比如按每行第二个字段排序):可以用
sort()的自定义比较函数,比如::let @a = join(split(@a, "\n")->sort({a,b -> split(a)[1] > split(b)[1] ? 1 : -1}), "\n")
- 基础字典序排序:
- 回到原文件粘贴即可:
"ap
这两种方法都只会处理寄存器里的内容,完全不会改动原文件中未被复制的行,完美匹配你的需求~
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

