Vim 如何围绕程序创建包装器?

Vim 如何围绕程序创建包装器?,vim,wrapper,rcs,Vim,Wrapper,Rcs,我想学习在linux中围绕程序创建包装器。如何做到这一点?教程参考网页/链接或示例即可。为了阐明我想学什么,我将用一个例子来解释 我使用vim编辑文本文件。并使用rcs作为我的简单修订控制系统rcs允许您签入和签出文件。我想创建一个名为vir的warpper程序,当我在shell中键入以下内容时: $ vir temp.txt 将使用ci-u temp.txt将文件temp.txt加载到rcs中,然后允许我使用vim编辑该文件 当我离开并返回时,它需要首先使用ci-u temp.txt签出文件

我想学习在linux中围绕程序创建包装器。如何做到这一点?教程参考网页/链接或示例即可。为了阐明我想学什么,我将用一个例子来解释

我使用vim编辑文本文件。并使用rcs作为我的简单修订控制系统rcs允许您签入和签出文件。我想创建一个名为vir的warpper程序,当我在shell中键入以下内容时:

$ vir temp.txt
将使用
ci-u temp.txt
将文件temp.txt加载到rcs中,然后允许我使用vim编辑该文件

当我离开并返回时,它需要首先使用
ci-u temp.txt
签出文件,并允许我像通常使用vim那样编辑文件,然后当我保存并退出时,它应该使用
co-u temp.txt
签入文件,作为其中的一部分,我应该能够添加版本控制注释

基本上,我只想在命令行上执行以下操作:

$ vir temp.txt

就像维姆一样。包装器应该为我负责版本控制。

看看rcsvers.vim,一个用于在RCS中自动保存版本的vim插件;你可以修改它。vim.org上还有其他用于vim的RCS插件

我有一个包装器来增强ping命令(使用zsh),它可能会帮助您:

# ping command wrapper - Last Change: out 27 2019 18:47
# source: https://www.cyberciti.biz/tips/unix-linux-bash-shell-script-wrapper-examples.html
ping(){
    # Name: ping() wrapper
    # Arg: (url|domain|ip)
    # Purpose: Send ping request to domain by removing urls, protocol, username:pass using system /usr/bin/ping
    local array=( $@ )          # get all args in an array
    local host=${array[-1]}     # get the last arg
    local args=${array[1,-2]}   # get all args before last arg in $@
    #local _ping="/usr/bin/ping"
    local _ping="/bin/ping"
    local c=$(_getdomainnameonly "$host")
    [ "$host" != "$c" ] && echo "Sending ICMP ECHO_REQUEST to \"$c\"..."
    # pass args and host
    # $_ping $args $c
    # default args for ping
    $_ping -n -c 2 -i 1 -W1 $c
}

_getdomainnameonly(){
    # Name: _getdomainnameonly
    # Arg: Url/domain/ip
    # Returns: Only domain name
    # Purpose: Get domain name and remove protocol part, username:password and other parts from url
    # get url
    local h="$1"
    # upper to lowercase
    local f="${h:l}"
    # remove protocol part of hostname
    f="${f#http://}"
    f="${f#https://}"
    f="${f#ftp://}"
    f="${f#scp://}"
    f="${f#scp://}"
    f="${f#sftp://}"
    # Remove username and/or username:password part of hostname
    f="${f#*:*@}"
    f="${f#*@}"
    # remove all /foo/xyz.html*
    f=${f%%/*}
    # show domain name only
    echo "$f"
}
它使用一个名为“ping”的函数隐藏本地ping,因此如果脚本在路径上具有优先级,它将首先找到函数ping。然后在脚本中,我定义了一个名为ping的内部变量,该变量指向实际的ping命令:

 local _ping="/bin/ping"

您还可以注意到,参数存储在一个数组中。

这通常是别名、函数、脚本或编译程序的用途。不管你用什么方法写一个程序,你都可以做到。谢谢。我将研究插件,因为它将提供比我可能为自己创建的更好的功能。我仍然想自己学习如何创建一个包装器,所以我也想学习。我想这就是我想要的。这是C代码还是bash代码?看起来像是巴什。我需要解释/详细说明这些代码行的作用:
local\u-ping=“/bin/ping”#看起来$\u-ping被/bin/ping取代了。这在c中是真的吗?
localC=$(\u getdomainnameonly“$host”)#看起来您正在进行排序评估。调用函数getdomainnameonly()并传递变量$host
$\u ping-n-c2-i1-W1$c#假设-n,-c2,-i1,-W1是标准的ping标志?我从未在“c”中测试过此代码,但是是的,$\u ping替换了
/bin/ping
。GetDomainName只除去目标站点的域以外的所有内容。只要我很久以前写过这段代码,但是这些都是为了让ping更快。