在 bash 中创建别名到 less.sh (less.vim)

Creating an alias in bash to less.sh (less.vim)

我正在尝试在 bash 中创建别名以使用 vim 中的内置 less.sh。我的目标是做一些事情,例如:

alias vless="/usr/local/Cellar/vim/8.0.0577/share/vim/vim80/macros/less.sh"

要求至少在 Linux 和 MacOS(有或没有自制软件)上工作。

以上路径来自vim安装homebrew;但是,这很不方便,因为:

考虑到这两点,如何制作这样的别名?

有没有类似vim --installation-prefix之类的开关来获取安装vim宏的路径?任何其他建议将不胜感激。

注意:我知道,但我对vimpagerview(=vim -R)不感兴趣。

:help $VIMRUNTIME中,您可以阅读:

In case you need the value of $VIMRUNTIME in a shell (e.g., for a script that greps in the help files) you might be able to use this:

VIMRUNTIME=`vim -e -T dumb --cmd 'exe "set t_cm=\<C-M>"|echo $VIMRUNTIME|quit' | tr -d '5' `

因此您可以用这样的 Bash 脚本替换您的别名:

#!/bin/bash

vimruntime=`vim -e -T dumb --cmd 'exe "set t_cm=\<C-M>"|echo $VIMRUNTIME|quit' | tr -d '5' `
[[ -z $vimruntime ]] && { echo 'Sorry, $VIMRUNTIME was not found' >&2; exit 1; }

vless=$vimruntime/macros/less.sh
[[ -x $vless ]] || { echo "Sorry, '$vless' is not accessible/executable" >&2; exit 1; }

$vless "$@"

(使用 "basic" linux vim 安装测试,未使用自制软件安装。)

不确定对于你的第二个要点我是否有好的解决方案,但就避免硬编码路径名而言,这是我的服务器管理员使用的 hack:

find /usr/share/vim -name less.sh | tail -n 1

我们服务器上的结果:/usr/share/vim/vim72/macros/less.sh

如果你想把它放在类似 bashrc 的东西中

VLESS_CMD=`find /usr/share/vim -name less.sh | tail -n 1`
if [ -n "$VLESS_CMD" ]; then
    alias vless=$VLESS_CMD
fi
alias vless=`vim -e -T dumb --cmd 'exe "set t_cm=\<C-M>"|echo $VIMRUNTIME|quit' | tr -d '5' `/macros/less.sh

它接近@yolenoyer 的优秀答案,但直接定义别名而不是调用脚本,很简单并且省略了 tests/checks。

在装有 vimhomebrew 的 BigSur 上测试。