perl - .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 的路径上放了一个空白,所以我必须把“”放在周围!我在哪里放置了一组文本过滤器?
谢谢您的回答
马立克
解决方案
您可以安全地创建一个与 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 中。
推荐阅读
- python - 通过给定的平稳向量计算马尔可夫链
- python - 如何从 python 中的 .wav 文件创建频谱图以解决音频分类问题
- java - Spring Boot:使用控制器调用 JSP 时出现 404 错误
- javascript - 如何在字符串的特定位置插入字母/数字?
- python - 在 django 模板中通过列表视图加载图像
- node.js - Neo4j:如何创建一个唯一节点而不是一组节点
- node.js - Heroku 错误,我不明白这是与 npm 包或超时有关的错误
- python - 如何访问同一字典的另一个键中的字典键值
- docker - Docker Alpine Texlive 错误:tlmgr:未找到
- c# - 数据库或文件是否更适合存储不同的用户输入,然后检索值以查找平均值或总和?