在 Emacs 或 Vim 中“实时”块编辑

在 Emacs 或 Vim 中“实时”块编辑

jEdit 支持块编辑,但 Emacs 和 Vim 似乎在同一主题上存在一些严重的可用性问题。如果有人可以在这里填写未知数,那么使用任一编辑器都会更容易忍受:

  • 实际矩形选择:在哪里选择在屏幕上是一个矩形,而不是像 Emacs 所限制的那样用于计算区域的线性选择。
    • jEdit:按住Ctrl并选择。
    • Vim:单击Ctrl-v并选择。
    • Emacs:未知;看起来有400多行插入是必要的。
  • 实时矩形编辑: 看看结果会是什么样子全部选择块后编辑时的行。
    • jEdit:只要开始输入,您就会看到最终结果。
    • Vim:单击Shift-i并输入。仅在第一行显示最终结果,直到您按下Esc退出插入模式。未知是否有某种方法可以立即查看所有行的结果。
    • Emacs:未知;看起来唯一的方法是C-x r t设置文本按后填充Ret
  • 在文本外部的位置开始和结束选择:例如,我想删除每行的前 N ​​个字符,但第一行和最后一行包含的字符少于 N 个。
  • 内嵌粘贴块:粘贴复制的块,就像粘贴多行一样,例如,推送已经存在的文本向下, 不对。
    • jEdit:默认值。要将块粘贴为块,您需要先进行另一个块选择。
    • 维姆:OEscVp
    • Emacs:未知

一般 Emacs 块选择功能可以在cua-mode插入

答案1

我可以回答 Vim,但不能回答 Emacs。

在文本外部的位置开始和结束选择:

:set virtualedit=block将启用您想要的行为。如果您愿意,您可以删除最初的冒号并将其添加到您的 .vimrc 中。有关更多信息,:help 'virtualedit'请从 Vim 内部获取。

内嵌粘贴块:

如果你只是p在命令模式下点击,Vim 将插入该块,将字符推到每行的右侧。如果您选择另一个块并点击p,Vim 会用粘贴的块替换该块。

您可以使用命令模式按键序列“逐行”粘贴块OEscVp。这将在当前行上方插入一行 ( O Esc),逐行选择它 ( V),然后粘贴到上面 ( p)。您可以将其缩短为(例如)yp使用映射,例如:nmap yp O<Esc>Vp-- 从字面上键入;使用五次击键<Esc>而不是按 Escape 键。

答案2

例如,我想删除每行的前 N ​​个字符,但第一行和最后一行包含的字符少于 N 个。

Emacs:从第一行开始选择,只需将缺少的字符数(例如空格)添加到最后一行,然后使用kill-rectangle

或者,请参阅artist-mode或 ,picture-mode它允许您在窗口中自由移动,无论行长如何。

内嵌粘贴块

Emacs:首先通过kill-rectangle或将其保存到寄存器来保存块,然后转到插入点,使用delete-rectangle,然后插入保存的矩形。

看起来需要 400 多行插件

如果是 Emacs,为什么会出现问题?可以编译插件,emacs 的理念是不要将所有内容放入核心,而是使用插件来扩展编辑器。

答案3

'cua 模式'它随 Emacsen 22.1 及更高版本一起提供,或者点击链接下载早期版本的 Emacs。有一个短视频介绍了该功能。

对于一般的矩形命令,请尝试阅读手册,它提供了一个简单的介绍。

答案4

在 vim 中,删除前 n 个字符的典型方法是执行类似:%s/.\{0,6\}//.

%将完成整个文档;您可以将其替换为选择或您关心的实际行。该s命令用于“替换”。它将用您提供的任何内容替换正则表达式,并且除非您添加特定选项,否则每行只会匹配一次。是/一个分隔符 - 可以是任何字符,但/通常会使用,除非使用其他字符更有利(因此您不必/在命令的其余部分中转义)。第一个分隔符后面的参数是一个正则表达式,将用于在您的选择中查找匹配的字符串。第二个分隔符后面的参数是匹配项将被替换的内容。

所以这个命令表示查找任意字符的 0 到 6 个实例,然后将其替换为空。

相关内容