oeasy教您玩转vim - 84 - # 命令command

命令 command 回忆

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

自定义命令command
  • :command DeleteFirst :1delete
    • :command 自定义命令command
    • 自定义命令 叫做 - DeleteFirst
    • 自定义命令DeleteFirst 对应的操作 - :1delete 删除第1行
  • 执行命令
    • :DeleteFirst
    • 执行成功
    • 第一行被删掉
oeasy教您玩转vim - 84 - # 命令command
文章图片

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

最初的函数
oeasy教您玩转vim - 84 - # 命令command
文章图片

  • :call Init()
    • 调用函数
    • 注意一定是在java文件中定义这个命令
    • 因为这个函数放在了java的ftplugin中
使用命令调用函数
  • :command Init :call Init()
    • 命令定义Init
    • 执行:call Init()
  • :Init
    • 执行命令
  • :command Init
    • 观察命令
    • 这些命令和前面的删除命令很类似
    • 都没有参数
oeasy教您玩转vim - 84 - # 命令command
文章图片

  • 其实应该定义的时候更加明确命令参数
明确参数
  • :h command
oeasy教您玩转vim - 84 - # 命令command
文章图片

  • 明确指定0个参数
    • :command! -nargs=0 DeleteFirst :1delete
    • :command! -nargs=0 Delete5Lines :.,+4delete
  • 那如果有个命令是一个参数的怎么办呢?
一个参数
  • :command -nargs=1 Say :echo ""
    • command定义一个命令
    • 只有一个参数
    • 作用是把Say后面的参数echo出来
oeasy教您玩转vim - 84 - # 命令command
文章图片

命令执行
oeasy教您玩转vim - 84 - # 命令command
文章图片

  • :Say oeasy say easy
    • 后面的三个单词作为一个参数
  • 想在字符串里面使用引号的话
    • 需要进行转义
多个参数调用函数
  • 定义函数
oeasy教您玩转vim - 84 - # 命令command
文章图片

  • 实验函数
    • :call Oeasy("oeasy","o2z","o3z")
    • 成功,函数没有问题
  • 定义命令
    • :command -nargs=* Oeasy :call Oeasy()
    • 命令Oeasy执行函数Oeasy
  • 执行命令
    • :Oeasy "111","222","333"
    • 执行命令成功
  • 但是不能执行
    • :Oeasy 111,222,333
  • 重新定义命令
    • :command! -nargs=* Oeasy :call Oeasy()
    • 注意这里command!是重新定义命令
    • Oeasy aaa bbb ccc
    • 执行命令成功
  • 执行命令
命令范围range
  • :h command
  • /range
oeasy教您玩转vim - 84 - # 命令command
文章图片

  • :command -range SaveIt :,write! save_file
oeasy教您玩转vim - 84 - # 命令command
文章图片

  • 当然还可以把他变成带参数的
  • :command -range -nargs=1 SaveIt :,write!
注释命令
function! Comment(line1, line2) execute a:line1.','.a:line2.'s/^/#/' endfunction command! -range=% Comment call Comment(,)

删除和清空命令
  • :delcommand SaveIt
    • 删除命令
  • :comclear
    • 清空命令
  • 我们最后总结一下吧
总结
  • 我们可以自己定义命令command
  • 也可以执行自定义的命令
  • 可以修改删除命令
  • 【oeasy教您玩转vim - 84 - # 命令command】命令可以带上
    • 参数
    • 范围
  • 除了自定义命令之外
  • 系统也有一些built-in的命令
  • 系统有什么好玩的命令么?
  • 下次再说!

    推荐阅读