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

时间:2017-04-30 04:23:14

标签: bash vim alias

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

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

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

以上路径来自vimhomebrew一起安装;但是,这非常不方便,因为:

  • 8.0.0577vim80是硬编码的(那里vim有很多73 ... 74/usr/local等等)
  • /usr一般不是linux发行版中的标准(通常vim在vim --installation-prefix内)。

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

是否有像vimpager左右的开关来获取安装vim宏的路径?任何其他建议将不胜感激。

注意:我知道,但我不感兴趣,在viewvim -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; )。

3 个答案:

答案 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 上测试,安装了 vimhomebrew