oeasy教您玩转vim - 84 - # 命令command
命令 command
回忆
关于 函数
function
:call execute(gg=G)
:call append(0,"oeasy o2z o3z")
可以调用别的函数
还可以执行表达式
这样就可以把一系列的操作封装到一个函数里面
然后在命令行模式调用就可以了
但如果我想不用`:call Init()"
而是像
:ls
一样执行:init
,可能么?🤔
命令列表
ls
是一个 命令command
我们可以
:command
查看所有用户定义的命令也可以
:command TOhtml
查询指定的命令这个TOhtml命令可以按照当前的颜色模式把文件输出成html文件

自定义命令command
:command DeleteFirst :1delete
:command
自定义命令command自定义命令 叫做 -
DeleteFirst
自定义命令DeleteFirst 对应的操作 -
:1delete
删除第1行执行命令
:DeleteFirst
执行成功
第一行被删掉

再定一个命令command
:command Delete5Lines :.,+5delete
尝试从当前行开始删除5行
:Delete5Lines
可以调用
但是总共删除6行
要注意删除从当前行到当前行下方第5行
总共6行
u回来修改
:command! Delete5Lines :.,+4delete
使用!重新定义命令command
:Delete5Lines
执行成功
恢复选区命令
:normal '<v'>
用
normal
模式执行后续命令'<
跳到原选区开头v
进入字符可视化'>
跳到原选区结尾command RestoreSelection :normal '<v'><cr>
normal 模式下执行命令
<cr> 回车
command 定义命令
RestoreSelection 命令名称
normal '<v'><cr>
尝试恢复选区
:RestoreSelection

最初的函数

:call Init()
调用函数
注意一定是在java文件中定义这个命令
因为这个函数放在了java的ftplugin中
使用命令调用函数
:command Init :call Init()
命令定义Init
执行
:call Init()
:Init
执行命令
:command Init
观察命令
这些命令和前面的删除命令很类似
都没有参数

其实应该定义的时候更加明确命令参数
明确参数
:h command

明确指定0个参数
:command! -nargs=0 DeleteFirst :1delete
:command! -nargs=0 Delete5Lines :.,+4delete
那如果有个命令是一个参数的怎么办呢?
一个参数
:command -nargs=1 Say :echo "<args>"
command定义一个命令
只有一个参数
作用是把Say后面的参数echo出来

命令执行
:Say oeasy say easy
后面的三个单词作为一个参数
想在字符串里面使用引号的话
需要进行转义
多个参数调用函数
定义函数

实验函数
:call Oeasy("oeasy","o2z","o3z")
成功,函数没有问题
定义命令
:command -nargs=* Oeasy :call Oeasy(<args>)
命令Oeasy执行函数Oeasy
执行命令
:Oeasy "111","222","333"
执行命令成功
但是不能执行
:Oeasy 111,222,333
重新定义命令
:command! -nargs=* Oeasy :call Oeasy(<q-args>)
注意这里command!是重新定义命令
Oeasy aaa bbb ccc
执行命令成功
执行命令
命令范围range
:h command
/range

:command -range SaveIt :<line1>,<line2>write! save_file

当然还可以把他变成带参数的
:command -range -nargs=1 SaveIt :<line1>,<line2>write! <args>
注释命令
function! Comment(line1, line2) execute a:line1.','.a:line2.'s/^/#/' endfunction command! -range=% Comment call Comment(<line1>,<line2>)
删除和清空命令
:delcommand SaveIt
删除命令
:comclear
清空命令
我们最后总结一下吧
总结
我们可以自己定义命令command
也可以执行自定义的命令
可以修改删除命令
命令可以带上
参数
范围
除了自定义命令之外
系统也有一些built-in的命令
系统有什么好玩的命令么?🤔
下次再说!