image - 在 vim 文件中插入 bash 脚本输出
问题描述
我在 Vim 中编写 markdown 并使用此快捷方式设置正确的 markdown 图像语法:
nnoremap <leader>p :s/.*/![](\0)/ <CR>
按下时,p
,/path/to/image/img.jpg
(在我的 vim 文本文件中)变为
![](/path/to/image/img.jpg)
但我想在那之后添加这个{ width = *variable*% }
,就像这样
![](img.jpg){ width = *variable*% }
我制作了这个小 bash 脚本 ( img.sh
),它根据图像大小为我提供了变量:
#!/bin/bash
VAR=$(identify -format '%h' $1)
echo "scale=3; 300 * (100/$VAR)" | bc
如果我在 vim 中这样做,:r !img.sh /path/to/image/img.jpg
在这种情况下我会得到一个数字 32
我想用上面的快捷方式启动这个脚本,我试过这个:
nnoremap <leader>p :s/.*/![](\0){ width=/ <CR> :r !img.sh /path/to/image/img.jpg <CR> % }
我希望您帮助我找到一种不键入图像路径来执行脚本的方法。如果我能找到一种方法来指示 vim 将其放在 img.sh 之后的快捷方式中,那么图像的路径已经写在文本中,那就太好了!
解决方案
您可以在:s
命令的替换端使用 Vimscript 表达式,这样您就可以使用submatch(0)
. :s
您可以使用以 开头的表达式来替换 a ,有关详细信息\=
,请参阅:help sub-replace-expression
。
使用替换表达式,您还可以使用该system()
函数调用外部命令,而不是使用单独的:r !...
命令将其输出读入当前缓冲区。
把它们放在一起:
:s/.*/\='![]('.submatch(0).']{ width='.trim(system('img.sh '.submatch(0))).' }'/
或者向它添加映射:
nnoremap <leader>p :s/.*/\='![]('.submatch(0).']{ width='.trim(system('img.sh '.submatch(0))).' }'/<CR>
(注意:您可能还想:noh
在映射的末尾添加一个命令,否则它将继续突出显示.*
与所有内容匹配的搜索。)
nnoremap <leader>p :s/.*/\='![]('.submatch(0).']{ width='.trim(system('img.sh '.submatch(0))).' }'/\|noh<CR>
推荐阅读
- javascript - 如何为 django 中的用户从本地目录制作文件上传器(.jpg、.mp3、.pdf 等)
- css - 为高度设置的 SASS 变量(如果高度)
- powerbi - 如何根据日期切片器但来自 2 个日期列显示数据
- smalltalk - 如何在 Visual Works 中获取 CPointer 的值
- javascript - 在 React 中获取数据
- unit-testing - 您如何在 aws-cdk 单元测试中模拟现有的 vpc?
- jquery - 从局部视图加载的 jQuery 自动完成结果
- python - Selenium 无法使用 python 定位错误?
- z3 - Z3 中的增量输入和断言集
- google-classroom - 从 Google 课堂获取学生提交的内容