我正在尝试在bash
中创建别名,以使用less.sh
中的内置vim
。我的目标是做一些事情,比如:
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
等等)/usr
一般不是linux发行版中的标准(通常vim在vim --installation-prefix
内)。如何考虑这两点来制作这样的别名?
是否有像vimpager
左右的开关来获取安装vim宏的路径?任何其他建议将不胜感激。
注意:我知道,但我不感兴趣,在view
或vim -R
(= typedef struct {
uint8_t packetType;
uint8_t remainingLength;
uint16_t protocolNameLength;
char protocolName[20];
uint8_t protocolLevel;
uint8_t connectFlags;
uint16_t keepAlive;
} Connect;
)。
答案 0 :(得分:2)
在:help $VIMRUNTIME
中,您可以阅读:
如果您需要shell中的$ VIMRUNTIME值(例如,对于脚本而言) 您可以使用此文件中的greps:
VIMRUNTIME=`vim -e -T dumb --cmd 'exe "set t_cm=\<C-M>"|echo $VIMRUNTIME|quit' | tr -d '\015' `
所以你可以用这样的Bash脚本替换你的别名:
#!/bin/bash
vimruntime=`vim -e -T dumb --cmd 'exe "set t_cm=\<C-M>"|echo $VIMRUNTIME|quit' | tr -d '\015' `
[[ -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 "$@"
(使用“基本”linux vim安装测试,而不是使用自制软件安装。)
答案 1 :(得分:0)
不确定第二个要点是否有好的解决方案,但是就避免硬编码路径名而言,这是服务器管理员使用的一种技巧:
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
答案 2 :(得分:0)
alias vless=`vim -e -T dumb --cmd 'exe "set t_cm=\<C-M>"|echo $VIMRUNTIME|quit' | tr -d '\015' `/macros/less.sh
它接近@yolenoyer 的优秀答案,但直接定义别名而不是调用脚本,很简单并且省略了测试/检查。
在 BigSur 上测试,安装了 vim
和 homebrew
。