Vim 过滤器

2025-06-10

Vim 过滤器

快速提示时间!我们来谈谈 Vim 过滤器。它是一种执行任何外部命令并将结果通过管道传输到当前缓冲区的方法。这是一种将 Shell 的强大功能引入 Vim 的好方法,无需学习太多 VimScript。以下是一些基础知识:

将命令输入读入当前缓冲区

这是最简单的方法:

:r !ls
Enter fullscreen mode Exit fullscreen mode

此命令会将结果读ls入光标所在位置的缓冲区。您还可以指定插入到哪一行之后。下一个命令会将命令结果读ls入到当前缓冲区的第 4 行之后。

:4r !ls
Enter fullscreen mode Exit fullscreen mode

将缓冲区内容作为输入发送到外部命令

您还可以将缓冲区中的行发送出去,以便用命令的结果进行替换。常见的做法是对您正在处理的整个缓冲区进行操作。

:%!sort
Enter fullscreen mode Exit fullscreen mode

选择%整个缓冲区,然后将!选定的行发送给外部sort命令。整个缓冲区的内容将被命令的结果替换。

例如,假设您正在处理一个文本文件。

# Attention, Everyone!

This markdown file contains some **pretty interesting** stuff.

I __mean__ it.
Enter fullscreen mode Exit fullscreen mode

但总感觉哪里不太对劲。它需要更进一步——更震撼!试试把它和简洁的 Ruby 单行代码结合起来!

:%!ruby -ne 'puts $_.upcase'
Enter fullscreen mode Exit fullscreen mode

突然间,缓冲区的内容是:

# ATTENTION, EVERYONE

THIS MARKDOWN FILE CONTAINS SOME **PRETTY INTERESTING** STUFF.

I __MEAN__ IT.
Enter fullscreen mode Exit fullscreen mode

它适用于任何命令。您可以使用 Shell 命令,也可以通过 Python 或 Node 脚本运行它。它让您能够选择最适合(或您喜欢)的工具来完成工作,而不是将您局限于 Vim 的功能。如果您只想替换缓冲区的一部分,也可以使用其他动作。

:!!ruby -ne 'puts $_.upcase'
Enter fullscreen mode Exit fullscreen mode

两个感叹号将在当前行上运行。

它也适用于可视化选择的行。在可视化模式下选择几行:

v         " Visual mode activated
jj        " Select next two lines
:!sort    " Sorts the lines that were selected.
Enter fullscreen mode Exit fullscreen mode

专家提示:如果您不小心运行了某个命令,导致文件丢失,请不要惊慌。只需u在普通模式下按下 即可撤消操作。

希望这有用!


最初发布于assert_not magic?

鏂囩珷鏉ユ簮锛�https://dev.to/rpalo/vim-filters-1p33
PREV
一个很酷的 Python 新进度条!
NEXT
使用 Python 进行数学艺术创作