在 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
;但是,这很不方便,因为:
8.0.0577
和 vim80
是硬编码的(那里有很多 vim
...73
、74
等)
/usr/local
通常在 linux 分布中不是标准的(通常 vim 在 /usr
内)。
考虑到这两点,如何制作这样的别名?
有没有类似vim --installation-prefix
之类的开关来获取安装vim宏的路径?任何其他建议将不胜感激。
注意:我知道,但我对vimpager
或view
(=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。
在装有 vim
和 homebrew
的 BigSur 上测试。
我正在尝试在 bash
中创建别名以使用 vim
中的内置 less.sh
。我的目标是做一些事情,例如:
alias vless="/usr/local/Cellar/vim/8.0.0577/share/vim/vim80/macros/less.sh"
要求至少在 Linux 和 MacOS(有或没有自制软件)上工作。
以上路径来自vim
安装homebrew
;但是,这很不方便,因为:
8.0.0577
和vim80
是硬编码的(那里有很多vim
...73
、74
等)/usr/local
通常在 linux 分布中不是标准的(通常 vim 在/usr
内)。
考虑到这两点,如何制作这样的别名?
有没有类似vim --installation-prefix
之类的开关来获取安装vim宏的路径?任何其他建议将不胜感激。
注意:我知道,但我对vimpager
或view
(=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。
在装有 vim
和 homebrew
的 BigSur 上测试。