oeasy教您玩轉(zhuǎn)vim - 83 - # 表達(dá)式Expression
表達(dá)式 expression
回憶
關(guān)于
函數(shù)function
,我們回憶一下可以查詢
可以新建
可以調(diào)用
還可以刪除
我想用
函數(shù)function
往buffuer
里面寫點(diǎn)東西比如寫一個(gè)java的基本程序框架
這樣一調(diào)用就好使了
省的自己打了
可以么???
追加函數(shù)
應(yīng)該如何去找關(guān)于寫
buffer
的函數(shù)呢?:h
找到用戶手冊(cè)41.6
找到這一類的函數(shù)
屬于text-functions
文本函數(shù)

追加函數(shù)
:h append()

幫助中提到了{(lán)lnum}可以是0
我來試試
函數(shù)初試
: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")
結(jié)論是可以插入
一次在指定位置插一行
如果想要插入最上面一行
使用
:call append(0,"在第一行插入")
插入框架

再重新進(jìn)入vi
:call Oeasy()
試驗(yàn)成功
但是這個(gè)應(yīng)該是只對(duì)于java文件起作用的?
應(yīng)該如何寫?
先把這段函數(shù)復(fù)制下來
ftplugin文件類型插件
使用文件類型插件有兩種方式
所有用戶共享文件類型插件
vi /usr/share/vim/vim81/ftplugin/java.vim
當(dāng)前用戶獨(dú)有的文件類型插件
mkdir -p ~/.vim/ftplugin
vi ~/.vim/ftplugin/java.vim

函數(shù)名改成Initial
保存并退出
文件類型初始化
在css文件中調(diào)用函數(shù)
vi Oeasy.css
:call Initial()
找不到函數(shù)
在java文件中調(diào)用函數(shù)
vi Oeasy.java
:call Initial()
插入成功
但是這個(gè)不夠通用
要是能關(guān)聯(lián)當(dāng)前文件的文件名作為類名就好了
使用文件名

:echo expand('%:t:r')
這是可以顯示當(dāng)前的文件名的

這原理是什么呢?
:h %:t

整合
把這個(gè)整合到Initial函數(shù)里面

試驗(yàn)成功
我想要調(diào)整整個(gè)buffer的縮進(jìn),怎么辦呢?
gg=G
但是我想把這條命令整合到Intial函數(shù)里面可能么?
表達(dá)式
怎么執(zhí)行正常模式的命令呢?
:h :normal

:normal gg=G
試驗(yàn)成功
normal gg=G
是一個(gè)命令表達(dá)式但是怎么在函數(shù)里面執(zhí)行這個(gè)表達(dá)式呢?
執(zhí)行命令表達(dá)式
先u回來
:h execute

可以在函數(shù)里面執(zhí)行表達(dá)式
什么是表達(dá)式呢?
就是剛才的Ex command
:execute "normal gg=G"
試驗(yàn)成功
縮進(jìn)之后我可以保存么?
:execute "w"
試驗(yàn)成功
:call execute("w")
也試驗(yàn)成功
下面嘗試放到函數(shù)里
在函數(shù)里執(zhí)行表達(dá)式

:call Init()
調(diào)用成功!
縮進(jìn)和保存都是ok的!
建立映射

:source %
:call Id()
:map ... :call Id()<CR>
:10,30>>
...
總結(jié)
關(guān)于 函數(shù)
function
:call execute("normal gg=G")
:call append(0,"oeasy o2z o3z")
可以調(diào)用別的函數(shù)
還可以執(zhí)行表達(dá)式
這樣就可以把一系列的操作封裝到一個(gè)函數(shù)里面
然后在命令行模式調(diào)用就可以了
但如果我想不用`:call Init()"
而是像
:ls
一樣執(zhí)行:init
,可能么???下次再說!
[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (https://gitee.com/overmind1980/oeasyvim)
[藍(lán)橋?qū)嶒?yàn)樓 邀請(qǐng)碼FJWYIMGB] (https://www.lanqiao.cn/courses/2840)