vim 的宏及一些特定用法的記錄
平時經常使用vim寫bash腳本,寫perl腳本.
一直想讓vim能自動添加一些文件,加入一些做者信息,日期,描述之類的東西.
就想用vim的宏功能來解決這個問題.
在~/.vimrc文件裏面加入:
let @m = "i#!/b^Huse^Hr/bin/perl^M^M# page ^["
註釋: ^M 是CR,即回車符
^[ 是ESC鍵
^H 是退格鍵.(我這裏輸錯好幾個地方,因此按了幾個退格鍵)
保存退出.隨便新建一個文件
直接輸入@m,看看有什麼?
這個語句能夠本身寫.也能夠生成.
用vim的宏生成方法以下:
新建一個文件,
按q // 開始錄製宏
再按u // 這是宏的名字
而後就能夠輸入一些內容或者你經常使用的一些動做.完過後
按esc鍵推出到命令模式
再按q結束宏的錄製,這樣,剛纔的操做過程就錄製到了名字爲u的宏中.
接下來就是看看宏的內容了,也就是上面所謂的生成宏的代碼.
在命令行裏輸入"up // 雙引號+宏名+p
看到代碼了把?複製粘貼到.vimrc中把.
格式:
let @宏名 = "代碼"
下次使用的時候,直接輸入@m就能夠插入這些信息
注:我曾經想讓它在新建一個文件的時候,自動加入,成是成功了.可是帶來一個不能接受的後果.就是每次打開文件的時候也會插入.......--!,就是在vimrc中加入一行內容
@m // 這裏有個問題,就是這樣調用,會西安進入末行模式,不是命令行
// 模式,因此宏並不會起做用,須要在代碼前面加入^M,及esc,退出
// 到命令行模式才行.
尋思着能不能加入一個判斷語句.可是無果.
其實到這裏也已經能用了,可是這個@符號是我最不喜歡打的符號之一.麻煩.幸運的是今天無心中發現一個更好的方法.
再vimrc中加入以下代碼:
"進行版權聲明的設置
"添加或更新頭
map <F4> ms:call TitleDet()<cr>'s
function AddTitle()
call append(0,"#####################################################")
call append(1,"#")
call append(2,"# Author: jason - jasonyy77@163.com")
call append(3,"#")
call append(4,"# QQ : 285642427")
call append(5,"#")
call append(6,"# Last modified: ".strftime("%Y-%m-%d %H:%M"))
call append(7,"#")
call append(8,"# Filename: ".expand("%:t"))
call append(9,"#")
call append(10,"# Description: 沒有什麼,就是一些練習.")
call append(11,"#")
call append(12,"####################################################")
echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
endf
"更新最近修改時間和文件名
function UpdateTitle()
normal m'
execute '/# *Last modified:/s@:.*$@\=strftime(":\t%Y-%m-%d %H:%M")@'
normal ''
normal mk
execute '/# *Filename:/s@:.*$@\=":\t\t".expand("%:t")@'
execute "noh"
normal 'k
echohl WarningMsg | echo "Successful in updating the copy right." | echohl N
one
endfunction
"判斷前10行代碼裏面,是否有Last modified這個單詞,
"若是沒有的話,表明沒有添加過做者信息,須要新添加;
"若是有的話,那麼只須要更新便可
function TitleDet()
let n=1
"默認爲添加
while n < 10
let line = getline(n)
if line =~ '^\#\s*\S*Last\smodified:\S*.*$'
call UpdateTitle()
return
endif
let n = n + 1
endwhile
call AddTitle()
endfunction
代碼來源:
http://www.vimer.cn/2010/01/用vim在代碼文件中自動添加ifdefdefineendif.html
我稍爲改了一下頭信息.改爲本身的了.但願做者不要介意.還能夠作一些修改.可是我以爲這個已經很不錯了.只須要改動一個文字就OK.3Q做者
用法很簡單了.
創文件的時候按下F4就能夠了.
修改好文件的時候,按F4還能夠更新修改裏面的時間 // 這點很強大
至於裏面的語法.和其它語言也差很少.詳細的.google vim腳本
下面有一個很好的鏈接:
隨便說一些宏真是一個很好的東西:
下面舉幾個例子:
一個文件100行,須要把1,2行合併,3,4行合併,依次類推.
合併行都知道是J.
用宏:
q
u
J
j
q // 到這裏宏錄製完成
100@u // 執行100次宏.多的會退出,沒有關係
結果如何?
例二:
一個文件100行,刪除奇數行.
用宏:
q
u
dd
j
q
50@u
再加兩個選項:
set number
set tabstop=4
我以爲頗有用,其它的選項無關緊要.google一下一大把.