perl - 如何在 Vim 中有效地将行转换为列?

标签 perl vim

我有一个如下所示的数据文件:

----------------------------
a b c d e .............
A B C D E .............
----------------------------
但我希望它采用以下格式:
----------------------------
a A
b B
c C
d D
e E
...
...
----------------------------
在 Vim 或 Perl 中进行转换的最快方法是什么?

最佳答案

基本上 :.s/ / SpaceCtrl+vEnter /g Enter jma:.s/ / Ctrl+vEnter /g EnterCtrl+v 'axgg$p'adG 就可以了。 :)

好的,让我们分解一下:

  • :.s/ / Ctrl+vEnter /g Enter:在当前行 ( . ) 上,将 ( s ) 空格 ( / / ) 替换为一个空格,后跟一个回车 (SpaceCtrl+vEnter / ),在所有位置 ( g )。光标现在应该在最后一个字母的行上(示例中的 e)。
  • j :向下一行(到 A B C D E )。
  • ma : 将标记 a 设置为当前位置...因为我们稍后要引用这个位置。
  • :.s/ / Ctrl+vEnter /g Enter:执行与上述相同的替换,但没有空格。光标现在应该在最后一个字母的行上(示例中的 E)。
  • Ctrl+v 'a :使用块选择从当前光标位置 (E) 中选择以标记 a(我们在上面的第 3 步中设置)。
  • x :剪切选择(进入 " 寄存器)。
  • gg : 将光标移动到第一行。
  • $ : 将光标移动到行尾。
  • p : 在光标位置后粘贴之前剪切的文本。
  • 'a :将光标移动到 a 标记(在步骤 3 中设置)。
  • dG :删除从光标位置到文件末尾的所有内容(底部留下的空行)。

  • 附言我希望了解“内置”解决方案,但直到那个时候......

    关于perl - 如何在 Vim 中有效地将行转换为列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11548342/

    相关文章:

    vim - 复制粘贴 - E353 寄存器中没有任何内容

    php - 反引号 `` 叫什么?

    regex - 使用任何扩展名重命名 perl 文件

    perl - 捕获 Perl 的 'system()' 的输出

    linux - vim linux 列格式化 -- 处理字符串文字

    vim - 使用 :e command in VIM

    Vim 表达式(和语言)敏感缩进 - 可能吗?

    vim - 将 <leader> 与 :normal 一起使用

    string - Perl 范围字符串 ID

    javascript - 为什么我的表单发布函数会打开我的 .pl 文件而不是执行它?