vim 的宏及一些特定用法的記錄

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一下一大把.
相關文章
相關標籤/搜索