关于vim:oeasy教您玩转vim-83-表达式Expression

36次阅读

共计 1468 个字符,预计需要花费 4 分钟才能阅读完成。

表达式 expression

回顾

  • 对于 函数 function ,咱们回顾一下

    • 能够查问
    • 能够新建
    • 能够调用
    • 还能够删除
  • 我想用 函数 functionbuffuer 外面写点货色
  • 比方写一个 java 的根本程序框架
  • 这样一调用就好使了
  • 省的本人打了
  • 能够么?🤔

追加函数

  • 应该如何去找对于写 buffer 的函数呢?
  • :h

    • 找到用户手册 41.6
    • 找到这一类的函数
    • 属于 text-functions
    • 文本函数

追加函数

  • :h append()

  • 帮忙中提到了 {lnum} 能够是 0
  • 我来试试

函数初试

  • :call append(0,"oeasy o2z o3z")
  • :call append(0,"111oeasy o2z o3z o4z")
  • :call append(0,"222oeasy o2z o3z o4z")
  • :call append(1,"3333oeasy o2z o3z o4z")
  • 论断是能够插入
  • 一次在指定地位插一行
  • 如果想要插入最下面一行

    • 应用:call append(0,"在第一行插入")

插入框架

  • 再从新进入 vi
  • :call Oeasy()
  • 试验胜利
  • 然而这个应该是只对于 java 文件起作用的?
  • 应该如何写?
  • 先把这段函数复制下来

ftplugin 文件类型插件

  • 应用文件类型插件有两种形式
  • 所有用户共享文件类型插件

    • vi /usr/share/vim/vim81/ftplugin/java.vim
  • 以后用户独有的文件类型插件

    • mkdir -p ~/.vim/ftplugin
    • vi ~/.vim/ftplugin/java.vim

  • 函数名改成 Initial
  • 保留并退出

文件类型初始化

  • 在 css 文件中调用函数

    • vi Oeasy.css
    • :call Initial()
    • 找不到函数
  • 在 java 文件中调用函数

    • vi Oeasy.java
    • :call Initial()
    • 插入胜利
    • 然而这个不够通用
    • 要是能关联以后文件的文件名作为类名就好了

应用文件名

  • :echo expand('%:t:r')
  • 这是能够显示以后的文件名的

  • 这原理是什么呢?
  • :h %:t

整合

  • 把这个整合到 Initial 函数外面

  • 试验胜利
  • 我想要调整整个 buffer 的缩进,怎么办呢?

    • gg=G
  • 然而我想把这条命令整合到 Intial 函数外面可能么?

表达式

  • 怎么执行失常模式的命令呢?

    • :h :normal

  • :normal gg=G

    • 试验胜利
  • normal gg=G是一个命令表达式
  • 然而怎么在函数外面执行这个表达式呢?

执行命令表达式

  • u 回来
  • :h execute

  • 能够在函数外面执行表达式
  • 什么是表达式呢?
  • 就是方才的 Ex command
  • :execute "normal gg=G"
  • 试验胜利
  • 缩进之后我能够保留么?
  • :execute "w"

    • 试验胜利
  • :call execute("w")

    • 也试验胜利
  • 上面尝试放到函数里

在函数里执行表达式

  • :call Init()
  • 调用胜利!
  • 缩进和保留都是 ok 的!

建设映射

  • :source %
  • :call Id()
  • :map ... :call Id()<CR>
  • :10,30>>
  • ...

总结

  • 对于 函数function

    • 能够调用别的函数

      • :call append(0,"oeasy o2z o3z")
    • 还能够执行表达式

      • :call execute("normal gg=G")
  • 这样就能够把一系列的操作封装到一个函数外面
  • 而后在命令行模式调用就能够了
  • 但如果我想不必 `:call Init()”
  • 而是像 :ls 一样执行:init,可能么?🤔
  • 下次再说!

[Github 地址] (https://github.com/overmind19…)
[Gitee 地址] (https://gitee.com/overmind198…)
[蓝桥实验楼 邀请码 FJWYIMGB] (https://www.lanqiao.cn/course…)

正文完
 0