IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Vim(gVim)对排序的妙用

Vimer 2012-03-11 22:20:35 累计浏览 5,404 次
本机暂存

    前段时间有博友在群里问了一个关于vim排序的问题,因为时间问题一直没帮忙解决,今天时间正好空出来,就帮忙搞了一下。

    原文的问题如下:

vimuser 说:
2012年03月1日 于 5:04 下午  (编辑)
今天折腾了一下午,研究vim的排序,看了教程和搜索了一些文档,还是没弄明白,vim的正则表达式跟一般的又不一样,来请教下博主。
 
|1 | 11 | 111| 1111|
|2 | 22 | 222| 2222|
要根据第3个|和第4个|之间的列进行排序该如何写命令呢?

    其实之前也只是简单的用过vim的sort命令,没有想过vim是否能完成如此复杂的排序,不过抱着试试看的态度,我看了一下sort的描述(:h :sort),其中一段话如下:

:[range]sor[t][!] [i][u][r][n][x][o] [/{pattern}/]
 
When /{pattern}/ is specified and there is no [r] flag
the text matched with {pattern} is skipped, so that
you sort on what comes after the match.
Instead of the slash any non-letter can be used.
For example, to sort on the second comma-separated
field:
    :sort /[^,]*,/

    翻译过来就是,sort确实可以指定跳过的字段,也就是说,我们只要能通过正则把

|1 | 11 | 
|2 | 22 |

    这一部分跳过就可以了~~

    这部分的正则表达式是:

1
|[^|]\\+|[^|]\\+\\s*

    所以最终的sort命令如下:

1
:sort /|[^|]\\+|[^|]\\+\\s*/

    原文给的例子不好看效果,我们改成如下的例子:

|1 | 11 | 222| 1111|
|2 | 22 | 111| 2222|

    调用:sort命令的结果是和原来的样子一致的,而调用我们的新命令的结果是:

|2 | 22 | 111| 2222|
|1 | 11 | 222| 1111|

同分类推荐文章

  1. 科技爱好者周刊(第 401 期):如何赚到10亿美元 (2026-06-26 08:05:38)
  2. 如何做决策 - 从 Go 的一个 issue 说起 (2026-06-26 08:00:00)
  3. Seven Player:Windows上播放115网盘视频的增强工具 (2026-06-09 00:06:47)

查看更多 开发者 文章 →

建议继续学习

  1. vim几个小技巧(批量替换,列编辑) (累计阅读 37,516)
  2. 简明Vim练级攻略 (累计阅读 22,277)
  3. Vim下的代码自动补全和代码跳转阅读 (累计阅读 15,348)
  4. 为什么要用 Emacs/Vim,而不是任何其他编辑器 (累计阅读 13,018)
  5. 高效Linux用户需要了解的命令行技能 (累计阅读 12,826)
  6. vim入门,进阶与折腾 (累计阅读 10,780)
  7. 在vim(gvim)中运行终端(对,你没有看错,我也没有写反) (累计阅读 10,744)
  8. 让vim在终端下的配色亮起来! (累计阅读 10,062)
  9. 最近总结的一些技巧(vim,python,svn,fiddler等) (累计阅读 8,204)
  10. vim的复制粘贴小结 (累计阅读 8,027)