首页 > 解决方案 > .vim 文件夹中有存储文本过滤器的好地方吗?

问题描述

我想创建一个过滤器文件夹,最好在 .vim 中,并且能够仅使用一个文件名运行文本过滤器:!过滤器.pl

我设置了一个 Perl 文本过滤器来更改 LaTeX 数学公式中的所有特殊字符,到目前为止运行良好 - 唯一的问题是它在整行而不是所选公式上运行,但我可以忍受它......

#!/usr/bin/perl -np

use strict;
use warnings;

# this filter transforms all special characters in Mathformular for LaTeX

s/\\/\\backslash /g;
s/([\$\#&%_{}])/\\$1/g;

但是调用这个过滤器很麻烦

: '<,'>!"/Users/username/Library/Mobile Documents/com~apple~CloudDocs/my_vim_cheat_sheet/perl_filter.pl" 

苹果在通往 iCloud 的路径上放了一个空白,所以我必须把“”放在周围!我在哪里放置了一组文本过滤器?

谢谢您的回答

马立克

标签: perlvimfilterlatex

解决方案


您可以安全地创建一个与 Vim 自己使用的名称不同的任何名称的子文件夹(请参阅 参考资料:h 'rtp')。所以这没关系:

:*!$HOME/.vim/filters/perl_filter.pl

Vim 也有一个用于通用过滤器的预定义接口,称为 'equalprg'。要使用它,只需将全局-本地(即两者set都有setlocal意义)选项equalprg设置为脚本的完全限定名称。然后=在视觉模式下点击以应用过滤器(或={motion}在正常模式下)。(阅读:h 'equalprg' :h =)。

如果您一次需要多个过滤器,并且切换equalprg不方便,您仍然可以尝试不同的选项以减少输入。

例如,映射,如

vnoremap <Leader>f :!/path/to/my/filter<CR>

然后\f在视觉模式下点击(或任何你的“领导”键集)将导致执行:'<,'>!/path/to/my/filter(请注意,视觉选择将自动应用)。

另一种尝试是设置一个专用的环境变量(它将被包括 shell 在内的所有子进程继承。例如,

:let $filters = '~/.vim/filters'
:*!$filters/myfilter.pl

当然,你可以把那些set equalprg=... vnoremap ... let $filters=...etc.etc. 在你的 vimrc 中。


推荐阅读