gpt4 book ai didi

vim - VI/M ex 命令中标记一个字符 block

转载 作者:行者123 更新时间:2023-12-04 00:47:00 25 4
gpt4 key购买 nike

对于 VI/M 来说,标记从第 M 行到第 N 行的行 block 准备好删除、剪切和粘贴,或复制和粘贴是相当简单的。

:M,N d
:M,N m p
:M,N t p

如果进一步要求VI/M标记从第M行第I个字符到第N行第J个字符的字符 block ,是否可以类似完成?

@编辑

除了要求 visual block mode 的下一个答案外,输入简洁的 ex 命令的选项怎么样?

@编辑 2

阐明字符 block 的含义:

  • 正方形 block 字符,由 visual block mode 寻址,通过在 normal mode 中按 Ctrl-v 直接调用
  • 连续字符的压缩区域,由 visual character mode 寻址,通过在 normal mode 中按 v 直接调用
  • 连续行的行区域,由 visual line mode 寻址,通过在 normal mode 中按 V 直接调用。在这种情况下,最初提出此主题时,上面已经说明了 ex mode 中的便捷解决方案。

@解决方案

ex mode 中选择从第 M 行第 I 列到第 N 行第 J 列的连续字符的任意zipzag 区域visual character mode 完全相同:

标记:

:normal! MggI|vNggJ|

删除:

:normal! MggI|vNggJ|d

猛拉:

:normal! MggI|vNggJ|y

移动到X行Y列

:normal! MggI|vNggJ|dXggY|p

复制到X行Y列

:normal! MggI|vNggJ|yXggY|p

@解决方案2

ex mode 中从第 M 行第 I 列到第 N 行第 J 列中选择任意方 block 字符,与 visual block mode 完全相同:

标记:

:execute "normal! MggI|\<C-v>NggJ|"

删除:

:execute "normal! MggI|\<C-v>NggJ|d"

猛拉:

:execute "normal! MggI|\<C-v>NggJ|y"

移动到X行Y列

:execute "normal! MggI|\<C-v>NggJ|dXggY|p"

复制到X行Y列

:execute "normal! MggI|\<C-v>NggJ|yXggY|p"

最佳答案

您可以使用 normal! 从 ex 命令模式使用可视 block 模式: 例如,要从 (42, 10) 到 (54, 20) 中选择一个 block (行,列)并将其抽出(两行必须至少有 20 个字符,否则应设置 virtualedit=block):

execute "normal! 42gg10|\<C-v>54gg20|y"

.这是一种非常直接的方法,仅在脚本中有用。

请注意,此命令至少有以下副作用:

  1. 设置标记 '< , '> , '[ , '] , '' .
  2. 移动光标。
  3. 更改寄存器 @" , @0 .
  4. 将一项添加到跳转列表。
  5. 覆盖之前的视觉选择。
  6. 改变 v:countv:count1变量。

关于vim - VI/M ex 命令中标记一个字符 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8882611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com