通过Vim中的外部命令管道部分线路选择

时间:2017-07-20 06:28:43

标签: vim base64

我知道我可以使用:!通过外部命令通过视觉选择来管理选定的,但有没有办法对一行中的单个单词执行相同的操作?我需要在配置文件中使用base64编码令牌,我遇到了麻烦,整条线都被发送到base64。如果我将单词移动到它自己的行,我最后会在base64字符串中编码一个尾随的\n字符。我知道有一个专门为此设计的插件,但一般情况下,可以通过外部程序将缓冲区的单元管道小于整行吗?

2 个答案:

答案 0 :(得分:4)

Ex命令:!是其中之一)都是基于行的,因为此模式所基于的 ex编辑器是行 - 基于

如果您经常需要过滤部分行,我确实建议使用其中一个插件。如果您想手动执行此操作,@ romainl的答案概述了(繁琐的)步骤 - 插件可以大大简化:

  • 使用尊敬的vis.vim,您可以使用:B !base64
  • unimpaired.vim插件以前有]Y / [Y映射直接编码/解码Base64(在Vimscript中实现)
  • express.vim定义了g=运算符,然后将查询要应用于它的表达式。您可以在此处使用!base64

答案 1 :(得分:3)

Ex命令(以:开头的所有内容)在线上工作,你无能为力。

过滤"非线路"更多参与。你需要:

  1. 挑选选择,
  2. 必要时逃避,
  3. 在子shell中运行带有该选择的过滤器,
  4. 必要时清理输出,
  5. 将选择替换为过滤器的输出。
  6. 简而言之:

    c<C-r>=system('echo "<C-r>"" | base64 | tr -d "\n"')<CR>
    

    这显然比过滤线要多得多。将它映射到更容易的东西。