Vim循序渐进:如何通过任意分隔符排列任意文本?

时间:2010-05-27 17:59:22

标签: editor vim

背景

Vim有很多很棒的教程和“技巧”页面,但有一点非常困难,就是找到特定的指令,说明如何做一些人们可以轻松做的任意事情。一个人熟悉的文本编辑器IDE。因此,我要求一步一步说明如何在Vim中做一些我已经知道如何在其他文本编辑器中做的事情。我喜欢Vim以及强大的内置帮助和大量的在线教程,但有时人类不得不打破并要求另一个人。

问题:

假设我的文件中有以下代码,如何使用Vim从BEFORE到AFTER?

  BEFORE:
  Lorem ipsum dolor |  sit amet, consectetur | adipisicing elit,
  sed do eiusmod | tempor incididunt | ut 
  labore et | dolore magna aliqua. | Ut enim ad minim veniam,
  quis nostrud | exercitation ullamco | laboris 
  nisi ut | aliquip ex ea commodo | consequat. Duis aute irure

  AFTER:
  Lorem ipsum dolor  |  sit amet, consectetur   |  adipisicing elit,         
  sed do eiusmod     |  tempor incididunt       |  ut                        
  labore et          |  dolore magna aliqua.    |  Ut enim ad minim veniam,  
  quis nostrud       |  exercitation ullamco    |  laboris                   
  nisi ut            |  aliquip ex ea commodo   |  consequat. Duis aute irure

备注:

  • 基于任意分隔符而不仅仅是管道,这样做会很好 字符。

  • 如果你还没有找到办法,但是你知道一个插件,这会有所帮助,但优先考虑的是那些拥有他们之前使用的工作解决方案的人

3 个答案:

答案 0 :(得分:13)

如果您使用Align插件,则只需:

  1. 使用V
  2. 直观地选择文字
  3. 输入:Align |
  4. |是任何分隔符

    OR

    1. 使用V
    2. 直观地选择文字
    3. 输入\t|
    4. 预设|快捷方式。

答案 1 :(得分:3)

这不是一个神奇的子弹,如果你这么做很多,我希望你会找到/制作一个插件,但这些步骤确实有效,不需要任何特殊安装,并且无论如何都很好学习,因为它们概括了一系列任务。

  1. :set noet以确保您不会将标签扩展到空格。
  2. :set ts=25设置一个漂亮的大标签停止大小。
  3. :%s/\w*|\w*/\t|\t/g在管道周围添加一个制表位,而不是任意间距。
  4. :set et在我们
  5. 时将标签转换回空格
  6. :retab转换它们。
  7. 此时,事情很顺利,但可能会有过多的间距。所以使用visual-block模式( Ctrl + v )来整理东西。
  8. 我经常使用这样的组合,用于一系列文本操作任务。视觉块模式非常有用,我还没有看到许多其他编辑器具有可比性。另请参阅:help blockwise-examples

答案 2 :(得分:2)

Damian Conway在IBM Developer Works上发表了一系列关于Vim的文章。这一个:

http://www.ibm.com/developerworks/linux/library/l-vim-script-2/index.html

显示如何创建一个函数来排列赋值运算符。它位于名为帮助您编码的函数的部分中。我想你可以根据自己的需要进行推广。或者使用Align插件。我有时会在编写自己的工具之间挣扎,从中可以学到一些东西,并获得别人的工具,这通常比我的工具更好,并且让我能够更快地恢复工作。

顺便说一句,整个系列优秀,还有更多。上一篇文章的最后一段说:

因此,在本系列的下一篇文章中,我们将探讨Vim的简单插件架构,它允许您分解.vimrc的部分内容并将它们隔离在单独的模块中。我们将通过开发一个改进使用XML的一些恐怖的独立模块来了解该插件系统的工作原理。