在 Vim 中通过外部命令选择管道部分线
Pipe partial line selection through external command in Vim
我知道我可以将 :!
与视觉选择一起使用,通过外部命令将选定的 行 管道化,但是有没有办法对单个行执行相同的操作一行字?我需要在配置文件中对令牌进行 base64 编码,我遇到了问题,整行都发送到 base64
。如果我将单词移到它自己的行,我将以 base64 字符串中编码的尾随 \n
字符结束。我知道有一个专门用于此的插件,但一般来说是否可以通过外部程序将缓冲区的单位小于整行?
Ex 命令(以 :
开头的所有内容)在行上工作,对此您无能为力。
过滤 "non-lines" 更复杂。您需要:
- 拉出选择,
- 必要时转义,
- 运行 您的过滤器在子外壳中具有该选择,
- 必要时清理输出,
- 用过滤器的输出替换选择。
简而言之:
c<C-r>=system('echo "<C-r>"" | base64 | tr -d "\n"')<CR>
这显然比过滤行要多得多。将它映射到更简单的东西。
Ex 命令(:!
是其中之一)都是基于行的,因为 ex 编辑器此模式所基于的是基于行的。
如果您经常需要过滤部分行,我确实建议使用其中一个插件。如果你想手动执行此操作,@romainl 的回答概述了(乏味的)步骤 - 插件可以大大简化:
- 有了尊者vis.vim,就可以用
:B !base64
- unimpaired.vim 插件以前有
]Y
/ [Y
映射直接编码/解码 Base64(在 Vimscript 中实现)
- express.vim 定义了一个
g=
运算符,然后将查询要应用于它的表达式。你可以在这里使用!base64
。
我知道我可以将 :!
与视觉选择一起使用,通过外部命令将选定的 行 管道化,但是有没有办法对单个行执行相同的操作一行字?我需要在配置文件中对令牌进行 base64 编码,我遇到了问题,整行都发送到 base64
。如果我将单词移到它自己的行,我将以 base64 字符串中编码的尾随 \n
字符结束。我知道有一个专门用于此的插件,但一般来说是否可以通过外部程序将缓冲区的单位小于整行?
Ex 命令(以 :
开头的所有内容)在行上工作,对此您无能为力。
过滤 "non-lines" 更复杂。您需要:
- 拉出选择,
- 必要时转义,
- 运行 您的过滤器在子外壳中具有该选择,
- 必要时清理输出,
- 用过滤器的输出替换选择。
简而言之:
c<C-r>=system('echo "<C-r>"" | base64 | tr -d "\n"')<CR>
这显然比过滤行要多得多。将它映射到更简单的东西。
Ex 命令(:!
是其中之一)都是基于行的,因为 ex 编辑器此模式所基于的是基于行的。
如果您经常需要过滤部分行,我确实建议使用其中一个插件。如果你想手动执行此操作,@romainl 的回答概述了(乏味的)步骤 - 插件可以大大简化:
- 有了尊者vis.vim,就可以用
:B !base64
- unimpaired.vim 插件以前有
]Y
/[Y
映射直接编码/解码 Base64(在 Vimscript 中实现) - express.vim 定义了一个
g=
运算符,然后将查询要应用于它的表达式。你可以在这里使用!base64
。