<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vim查找操作

    Posted on 2009-09-02 12:25 林光炎 閱讀(3502) 評論(0)  編輯  收藏 所屬分類: LINUX

     

    " 搜索
    /joe/e : 設置光標到匹配"joe"的末尾
    /joe/e+1 : 設置光標到匹配"joe"的末尾再后移一位
    /joe/s-2 : 設置光標到匹配"joe“的開頭再前移兩位
    /^joe.*fred.*bill/ : 匹配以'j'開頭且"joe"到"fred"到"bill"之間至少有一個字符
    /^[A-J]\+/ : 搜索'A'到’J‘重復兩次以上的開頭行
    /begin\_.*end : 多行匹配
    /fred\_s*joe/i : 可以是任何空白字符包括\n,\t等等
    /fred\|joe : 搜索fred或者joe
    /.*fred\&.*joe : 搜索同時包括fred跟joe的行
    /\<fred\>/i : 搜索獨立的單詞fred
    /\<\d\d\d\d\> : 搜索獨立的4位數字
    /\D\d\d\d\d\D : 搜索6位字符串中間4位數字前后兩位不能為數字
    /\<\d\{4}\> : 同/\<\d\d\d\d\>
    " 查找空行
    /^\n\{3} : 匹配三連續的空行
    " 使用正則表達式組查找
    /\(fred\).*\(joe\).*\2.*\1
    " 正則表達式重復
    /^\([^,]*,\)\{8}
    " visual searching
    :vmap // y/<C-R>"<CR> : visually模式下的鍵盤映射,把//映射成匹配當前選中的文本
    :vmap <silent> // y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> : 包括空白字符
    " \zs 和 \ze 匹配原 :h /\zs
    /<\zs[^>]*\ze> : 匹配尖括號中的內容
    " 零寬度匹配 :h /\@=
    /<\@<=[^>]*>\@= : search for tag contents, ignoring chevrons
    /<\@<=\_[^>]*>\@= : search for tags across possible multiple lines
    " 多行查找 \_ 的意思是包括換行符
    /<!--\_p\{-}--> : 匹配<!--開始到-->結尾的所有內容
    /fred\_s*joe/i : 匹配fred開始到joe,之間一定得是空白字符
    /bugs\(\_.\)*bunny : 匹配所有bugs到bunny的字符串
    :h \_ : help
    " 查找函數聲明,nmap為normal模式下的鍵盤映射
    :nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR>
    " 查找多個文件
    :bufdo /searchstr/ : 在多個文件緩沖區里執行查找
    " 更好的多文件查找定位方法
    :bufdo %s/searchstr/&/gic : 在多個文件緩沖區里查找,按下n停止
    " 怎樣不使用 / 來查找網址
    ?
    http://www.vim.org/ : 向后查找
    " 查找指定字符以外的字符串
    /\c\v([^aeiou]&\a){4} : 查找4個輔音字母
    ----------------------------------------
    #替換
    :%s/fred/joe/igc : 普通替換命令
    :%s/\r//g : 刪除 DOS 的換行符 ^M
    " 你的文本文件是否亂七八糟的排成一行?使用如下命令
    :%s/\r/\r/g : 轉換 DOS 回車符 ^M 為真正的回車符
    :%s= *$== : 刪除行尾空白
    :%s= \+$== : 同上
    :%s#\s*\r\?$## : 刪除尾部空白和dos換行符
    :%s#\s*\r*$## : 同上
    " 刪除空行
    :%s/^\n\{3}// : 刪除連續3個空行
    :%s/^\n\+/\r/ : 壓縮空行,多個替換為一個
    %s#<[^>]\+>##g : 刪除html的tag部分
    " IF YOU ONLY WANT TO KNOW ONE THING
    :'a,'bg/fred/s/dick/joe/igc : 非常有用
    # 譯釋:''a,''b指定一個范圍:mark a ~ mark b
    # g//用一個正則表達式指出了進行操作的行必須可以被fred匹配
    # 看后面,g//是一個全局顯示命令
    # s/dick/joe/igc則對于這些滿足條件的行進行替換
    " 復制列
    :%s= [^ ]\+$=&&= : 復制最后一列
    :%s= \f\+$=&&= : 一樣
    :%s= \S\+$=&& : 暈,還一樣!
    " 記憶(反向引用)
    :s/\(.*\):\(.*\)/\2 : \1/ : 將兩個字段顛倒
    :%s/^\(.*\)\n\1$/\1/ : 刪除重復行
    " 非貪婪匹配 \{-}
    :%s/^.\{-}pdf/new.pdf/ : 刪除第一個pdf
    " use of optional atom \?
    :%s#\<[zy]\?tbl_[a-z_]\+\>#\L&#gc : lowercase with optional leading characters
    " 跨越盡量多的行
    :%s/<!--\_.\{-}-->// : 刪除多行注釋
    :help /\{-} : 查看非貪婪匹配的更多幫助
    " 使用寄存器替換
    :s/fred/<c-r>a/g : 將fred替換為寄存器a里的內容
    :s/fred/<c-r>asome_text<c-r>s/g
    :s/fred/\=@a/g : better alternative as register not displayed
    " 在一行里寫多種命令
    :%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d | %s/gif/jpg/
    :%s/a/but/gie|:update|:next : 當使用 @: 來重復
    " 或運算
    :%s/suck\|buck/loopy/gc : 替換suck或者buck(這里|不是管道)
    " 調用vim函數
    :s/__date__/\=strftime("%c")/ : 將__date__替換成當前日期,使用strftime函數
    " 處理列,替換所有在第三列中的str1
    :%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
    " 交換第一列跟第四列
    :%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
    " 過濾form中的內容放在寄存器里
    :redir @*|sil exec 'g#<\(input\|select\|textarea\|/\=form\)\>#p'|redir END
    :nmap ,z :redir @*<Bar>sil exec 'g@<\(input\<Bar>select\<Bar>textarea\<Bar>
    /\=form\)\>@p'<Bar>redir END<CR>
    " 兩位以上的數字減三(帶進位。這個命令挺有趣)
    :%s/\d\+/\=(submatch(0)-3)/
    " 包含loc或者functions的行中的數字加6
    :g/loc\|function/s/\d/\=submatch(0)+6/
    " 比上面更好的方法
    :%s#txtdev\zs\d#\=submatch(0)+1#g
    :h /\zs 查看幫助
    " 前綴為gg的數字加6
    :%s/\(gg\)\@<=\d\+/\=submatch(0)+6/
    :h zero-width 查看幫助
    " 替換一個特定字符串為數字
    :let i=10 | 'a,'bg/Abc/s/yy/\=i/ |let i=i+1 # 將yy轉換成10,11,12等等
    " 比上面的更精確
    :let i=10 | 'a,'bg/Abc/s/xx\zsyy\ze/\=i/ |let i=i+1 # 將xxyy 轉換成 xx11,xx12,
    xx13
    " find replacement text, put in memory, then use \zs to simplify substitute
    :%s/"\([^.]\+\).*\zsxx/\1/
    " Pull word under cursor into LHS of a substitute
    :nmap <leader>z :%s#\<<c-r>=expand("<cword>")<cr>\>#
    " Pull Visually Highlighted text into LHS of a substitute
    :vmap <leader>z :<C-U>%s/\<<c-r>*\>/
    ----------------------------------------
    " all following performing similar task, substitute within substitution
    " Multiple single character substitution in a portion of line only
    :%s,\(all/.*\)\@<=/,_,g : replace all / with _ AFTER "all/"
    " Same thing
    :s#all/\zs.*#\=substitute(submatch(0), '/', '_', 'g')#
    " Substitute by splitting line, then re-joining
    :s#all/#&^M#|s#/#_#g|-j!
    " Substitute inside substitute
    :%s/.*/\='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/
    ----------------------------------------
    " 全局顯示命令
    :g/gladiolli/# : 查找并顯示匹配的行號
    :g/fred.*joe.*dick/ : 顯示所有含有 fred,joe & dick的行
    :g/\<fred\>/ : 顯示單一單詞fred
    :g/^\s*$/d : 刪除所有空行
    :g!/^dd/d : 刪除不含字符串''dd''的行
    :v/^dd/d : 同上
    :g/fred/,/joe/d : 刪除所有的從fred到joe
    :g/-------/.-10,.d : 以-------為標記刪除之前的10行
    :g/{/ ,/}/- s/\n\+/\r/g : 刪除 {...}之間的空行
    :v/\S/d : Delete empty lines (both types)
    :v/./,/./-j : 壓縮空行
    :g/^$/,/./-j : 同上
    :g/<input\|<form/p : 或運算
    :g/^/put_ : 雙倍行寬 (pu = put)
    :g/^/m0 : 顛倒文件 (m = move)
    :'a,'bg/^/m'b : 顛倒選中的 a 到 b
    :g/^/t. : 重復行
    :g/fred/t$ : 拷貝行從fred到結尾
    :g/stage/t'a : 拷貝行從stage 到 marker a(a為標記的位置)
    :g/\(^I[^^I]*\)\{80}/d : 刪除最少包含80個tab的行
    " perform a substitute on every other line
    :g/^/ if line('.')%2|s/^/zz /
    " match all lines containing "somestr" between markers a & b
    " copy after line containing "otherstr"
    :'a,'bg/somestr/co/otherstr/ : co(py) or mo(ve)
    " as above but also do a substitution
    :'a,'bg/str1/s/str1/&&&/|mo/str2/
    :%norm jdd : 隔行刪除
    " 增加數字 (鍵入 <c-a>)
    :.,$g/^\d/exe "norm! \<c-a>": 增加從當前行首到結尾的數字
    :'a,'bg/\d\+/norm! ^A : 增加數字
    " 保存全局命令的結果 (注意必須使用添加模式) 你需要使用 qaq 清空寄存器a.
    "save results to a register/paste buffer 存儲結果到 寄存器/粘貼 到 a
    :g/fred/y A : 添加配備行到寄存器到 a
    :g/fred/y A | :let @*=@a : 放入復制緩沖區
    :let @a=''|g/Barratt/y A |:let @*=@a
    :'a,'b g/^Error/ . w >> errors.txt
    " 復制每一行,然后在復制出來的每一行兩側加上一個 print '復制出來的內容'
    :g/./yank|put|-1s/'/"/g|s/.*/Print '&'/
    " 用文件中的內容替換字符串,-d 表示刪除“標記”
    :g/^MARK$/r tmp.ex | -d
    " display prettily
    :g/<pattern>/z#.5 : display with context
    :g/<pattern>/z#.5|echo "==========" : display beautifully
    " Combining g// with normal mode commands
    :g/|/norm 2f|r* : replace 2nd | with a star
    "send output of previous global command to a new window
    :nmap <F3> :redir @a<CR>:g//<CR>:redir END<CR>:new<CR>:put! a<CR><CR>
    ----------------------------------------
    " 全局命令和替換命令聯姻 (強大的編輯能力)
    :'a,'bg/fred/s/joe/susan/gic : 可以使用反向引用來匹配
    :g/fred/,/joe/s/fred/joe/gic : non-line based (ultra)
    ----------------------------------------
    " 先找fred,然后找joe
    :/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
    ----------------------------------------
    " create a new file for each line of file eg 1.txt,2.txt,3,txt etc
    :g/^/exe ".w ".line(".").".txt"
    ----------------------------------------
    " Absolutely essential
    ----------------------------------------
    * # g* g# : 查找當前光標下的單詞(單個單詞) (<cword>) (向前/向后)
    % : 匹配括號 {}[]()
    . : 重復上次操作
    @: : 重復上次的命令
    matchit.vim : 適%能匹配 <script> <?php等標記
    <C-N><C-P> : 插入模式下自動完成填詞
    <C-X><C-L> : 行自動完成(超級有用)
    /<C-R><C-W> : 把單個<cword>單詞放入搜索或者命令行
    /<C-R><C-A> : 把字符串中有的單詞<CWORD>放入搜索或者命令行
    :set ignorecase : 忽略大小寫
    :syntax on : 打開語法高亮 Perl,HTML,PHP 等等
    :h regexp<C-D> : 按ctrl+d得到包含regexp的列表
    (按tab自動不齊)
    ----------------------------------------
    " 簡單編輯更新 _vimrc文件
    :nmap ,s :source $VIM/_vimrc :普通模式下的鍵盤映射 ,s映射成加載用戶目錄下的
    _vimrc文件
    :nmap ,v :e $VIM/_vimrc :,v映射成打開_vimrc文件
    ----------------------------------------
    #VISUAL 模式 (方便增加 HTML 標簽)
    :vmap sb "zdi<C-R>z<ESC> : 在 VISUALLY模式下將選中的文本前后分別加上
    :vmap st "zdi<?= <C-R>z ?><ESC> : 加上 <?= ?>
    ----------------------------------------
    " 瀏覽
    :Exp(lore) : 瀏覽文件
    :Sex(plore) : 分割窗口瀏覽文件
    :ls : 顯示緩沖區
    :cd .. : 設置當前目錄位置
    :args : 查看當前打開的所有文件
    :lcd %:p:h : 改變路徑到當前編輯的文件
    :autocmd BufEnter * lcd %:p:h : 放入.vimrc自動完成上面的命令
    ----------------------------------------
    " 緩沖區瀏覽(一直排名前10的vim腳本)
    " 需要 bufexplorer.vim
    http://www.vim.org/script.php?script_id=42
    \be : 緩沖瀏覽器中查看緩沖列表
    \bs : 同上,但是分割窗口
    ----------------------------------------
    " 轉換大小寫
    guu : 將正行的字母轉換成小寫
    gUU : 將正行的字母轉換成大寫
    Vu : 轉換選中的行(小寫)
    VU : 轉換選中的行(大寫)
    g~~ : 反向轉換
    vEU : 轉換詞大寫
    vE~ : 反向轉換詞
    ggguG : 將當前編輯文件內容全部轉換成小寫
    " Visually 模式下選擇所有的字母及數字 (放入 .vimrc文件中)
    vmap ,c :s/\<\(.\)\(\k*\)\>/\u\1\L\2/g<CR>
    " 大寫所有句子的第一個字母
    :%s/[.!?]\_s\+\a/\U&\E/g
    ----------------------------------------
    gf : 打開當前光標下或后的文件
    :nnoremap gF :view <cfile><cr> : 打開當前光標下或后的文件, 如果不存在則創建
    ga : 顯示當前光標下單個字的ascii,十進制,十六進制……
    ggVGg? : 將整個文件用rot13編碼……(誰看得懂啊~~hoho)
    ggg?G : 同上 (針對大文件)
    :8 | normal VGg? : 將第八行用rot13編碼
    :normal 10GVGg? : 同上
    <C-A>,<C-X> : 增加,減少當前光標下的數字
    win32 用戶需要重定義 CNTRL-A
    <C-R>=5*5 : 插入25 (小型計算器)
    ----------------------------------------
    " 幾個彩蛋……
    :h 42 : also
    http://www.google.com/search?q=42
    :h holy-grail
    :h!
    ----------------------------------------
    " 標記 & 移動
    '. : 跳回最后編輯的行 (超有用)
    `. : 同上,但是定位編輯點
    g; : 跳轉到比較舊的編輯位置(如果有的話) (vim6.3后的新功能)
    g, : 這個是較心的位置 (同上)
    :changes :打出改變表
    :h changelist : 查看“改變表跳轉”的幫助
    <C-O> : 依次沿著你的跳轉記錄向回跳 (從最近的一次開始)
    <C-I> : 依次沿著你的跳轉記錄向前跳
    :ju(mps) : 列出跳轉軌跡
    :help jump-motions
    :history : 列出歷史記錄
    :his c : 命令行歷史
    :his s : 搜索歷史
    q/ : 搜索命令歷史的窗口
    q: : 命令行命令歷史的窗口
    :<C-F> : 歷史窗口
    ----------------------------------------
    " 縮寫 & 映射
    :map <f7> :'a,'bw! c:/aaa/x
    :map <f8> :r c:/aaa/x
    :map <f11> :.w! c:/aaa/xr<CR>
    :map <f12> :r c:/aaa/xr<CR>
    :ab php : 查看以php開頭的縮寫
    :map , : 列出所有的映射(以逗號開始的)
    " 允許映射 F10 (win32)
    set wak=no : :h winaltkeys
    " 映射中常使用的表示
    <CR> : 回車
    <ESC> : Esc
    <LEADER> : 右斜杠
    <BAR> : 管道符號
    <BACKSPACE> : 退格鍵
    <SILENT> : 不回顯
    #顯示自定義的 RGB 顏色顯示當前光標下的字符串 例如 #445588
    :nmap <leader>c :hi Normal guibg=#<c-r>=expand("<cword>")<cr><cr>
    map <f2> /price only\\|versus/ :in a map need to backslash the \
    ----------------------------------------
    " Simple PHP debugging display all variables yanked into register a
    " 簡單的 PHP 調試將所有顯示的變量放入寄存器a
    iab phpdb exit("<hr>Debug <C-R>a ");
    ----------------------------------------
    " 使用寄存器來映射 (放入 .vimrc文件自動加載)
    :let @m=":'a,'bs/"
    :let @s=":%!sort -u"
    ----------------------------------------
    " 列出寄存器
    :reg : 顯示當前所有的寄存器
    :reg a : 顯示寄存器a中的內容
    "1p.... : 引用一個叫1的寄存器
    :let @y='yy@"' : pre-loading registers (put in .vimrc)
    qqq : 清空寄存器 "q"
    ----------------------------------------
    " 一些有用的決竅
    "ayy@a : 把當前行作為命令執行
    yy@" : 上面的匿名寄存器
    u@. : 只執行鍵入的命令
    ----------------------------------------
    " 從其它命令處獲得輸入(需要外部命令)
    :r!ls.exe : 從ls 獲得輸入插入到當前位置
    !!date : 從date獲得輸入(刪除當前行)
    " 使用外部sort排序
    :%!sort -u : 用sort排序整個文件(結果覆蓋整個文件)
    :'a,'b!sort -u : 從mark a到mark b之間的內容進行排序
    !1} sort -u : 排序一個段落
    :g/^$/;,/^$/-1!sort : Sort each block (note the crucial ;)
    ----------------------------------------
    " 多文件管理 (基本的)
    :bn : 跳轉到下一個buffer
    :bp : 跳轉到前一個buffer
    :wn : 保存當前buffer并跳轉到下一個buffer (超有用)
    :wp : 保存當前buffer并跳轉到前一個buffer
    :bd : 把當前文件從buffer移出 (超有用)
    :bun : 卸載當前buffer (關閉這個窗口但是不移出)
    :badd file.c : 添加file.c到buffer列表
    :b 3 : 前往第三個 buffer
    :b main : 前往含有main的buffer中 比如說 main.c
    :sav php.html : 把當前文件存為php.html并打開
    :sav! %<.bak : 換一個后綴名保存 (舊方法)
    :sav! %:r.cfm : 同上
    :sav %:s/fred/joe/ : 替換文件名
    :sav %:s/fred/joe/:r.bak2 : 替換文件和后綴
    :!mv % %:r.bak : 重命名當前文件
    :e! : 打開未修改之前的文件
    :w c:/aaa/% : 存儲文件到指定位置
    :e # : 編輯標記為#的文件在buffer中
    :rew : 返回到第一個可編輯的文件
    :brew : 回到第一個buffer
    :sp fred.txt : 分割窗口打開fred.txt
    :sball,:sb : 把所有的 buffers分割顯示在一個窗口中 (超有用)
    :scrollbind : in each split window
    :map <F5> :ls<CR>:e # : 按F5顯示所有buffer, 并顯示行號
    :set hidden : 允許不保存當前buffer而進行切換
    ----------------------------------------
    " 在分割窗口中快速切換
    map <C-J> <C-W>j<C-W>_
    map <C-K> <C-W>k<C-W>_
    ----------------------------------------
    " 錄制命令 (最好的技巧)
    qq # 錄制命令放入 q寄存器
    輸入一些命令
    q # 錄制結束
    @q :執行放入寄存器q中的內容
    @@ :重復
    5@@ :重復5次
    " 編輯一個 寄存器/錄制
    "qp :顯示寄存器q中的內容(普通模式下)
    <ctrl-R>q :顯示寄存器q中的內容 (插入模式下)
    " 你現在可以看到記錄內容,隨便編輯
    "qdd :刪除,重新存入q
    @q :執行 錄制/寄存器 q
    " 在可視塊中運行記錄
    1) 定義記錄/寄存器
    qq:s/ to/ from/g^Mq
    2) 定義可視塊
    V}
    3) 鍵入 : 將顯示下面信息
    :'<,'>
    4)完成如下操作
    :'<,'>norm @q
    ----------------------------------------
    "combining a recording with a map (to end up in command mode)
    nnoremap ] @q:w!<bar>bd
    ----------------------------------------
    " 可視化模式提供一種靈活易用的方法選擇一塊文本供操作符使用
    " 記出
    v : 進入可視化模式
    V : 進入可視化行選擇模式
    <C-V> : 進入可視化塊選擇模式
    gv : 重新選擇
    o : 選擇的區域頭尾移動
    "*y : 復制選擇區域到paste buffer
    V% : 選擇一個匹配段
    V}J : 合并一個段落
    V}gJ : 合并一個段落,并保留空格
    ----------------------------------------
    " 刪除選中的10行的前兩個字符(不過這里應該假設是緊湊的排版格式,不能包含空格、
    tab等字符的,可是經實驗應該是錢3個字符才對啊??)
    0<c-v>10j2ld
    ----------------------------------------
    " 如何用可視塊拷貝幾列
    " 可視塊(并非通常的 v 命令)
    <C-V>,然后通過移動命令選擇列 (win32 <C-Q>)
    然后執行 c,d,y,r 等命令
    ----------------------------------------
    " how to overwrite a visual-block of text with another such block
    Pick the first block: ctrl-v move "ay
    Pick the second block: ctrl-v move c ctrl-o "aP <esc>
    ----------------------------------------
    " _vimrc 基本設置
    :set incsearch : 輸入搜索命令時,立即顯示目前輸入的模式對應的匹配。匹配的字符串
    被高亮。
    :set wildignore=*.o,*.obj,*.bak,*.exe : tab補全時忽略這些忽略這些
    :set shiftwidth=3 : 設置自動縮進為3個字符
    :set vb t_vb=". : 安靜模式,關閉響鈴跟閃爍
    :set browsedir=buffer : 設置文件瀏覽使用的目錄
    “注:
    ”last 使用文件瀏覽器最近訪問相同的目錄。
    “buffer 使用相關緩沖區的目錄。
    ”current 使用當前目錄。
    “{path} 使用指定目錄。
    ----------------------------------------
    " 啟動windows中的IE
    :nmap ,f :update<CR>:silent !start c:\progra~1\intern~1\iexplore.exe
    file://%:p<CR>
    :nmap ,i :update<CR>: !start c:\progra~1\intern~1\iexplore.exe <cWORD><CR>
    ----------------------------------------
    " 在vim里打開ftp
    cmap ,r :Nread
    ftp://209.51.134.122/public_html/index.html
    cmap ,w :Nwrite ftp://209.51.134.122/public_html/index.html
    gvim ftp://www.somedomain.com/index.html # 使用 netrw.vim
    ----------------------------------------
    " 向寄存器中添加內容 (使用相應寄存器名稱的大寫)
    " 復制5行放入a寄存器,然后向下跳轉10行再復制5行
    "a5yy
    10j
    "A5yy
    ----------------------------------------
    [I : 顯示當前行中字符的所有匹配(超級有用)
    ----------------------------------------
    " 常規縮進
    :'a,'b>> :將mark a到mark b之間的內容進行兩次縮進
    " 虛擬模式下縮進 (可重復)
    :vnoremap < <gv
    ”這是一個虛擬模式下的鍵盤映射 < 映射為<gv
    "< 意為向內縮進,gv 上面已有解釋,為重復上次選區
    “<gv 也就是先向內縮進然后再選擇剛才的選區
    “這樣就可以只按 < 實現重復縮進了
    :vnoremap > >gv :向內縮進,原理同上
    " 塊縮進
    >i{
    >a{
    " also
    >% and <%
    ”自己試試看吧,涉及到用 { 的語言很有用,比如c,c++等
    ----------------------------------------
    " 重定向 & 粘貼到寄存器 * (*為寄存器名稱)
    :redir @* : 重定向命令到paste緩沖區
    :redir END : 結束
    :redir >> out.txt : 重定向到文件
    " 操作粘貼緩沖區
    "*yy : 復制到寄存器
    "*p : 從寄存器中粘貼一行
    " 復制到粘貼緩沖區 (擴展模式)
    :'a,'by* : 復制一個范圍到粘貼寄存器
    :%y* : 復制一個括號匹配到粘貼緩沖區
    :.y* : 復制當前行到粘貼緩沖區
    " 從剪貼板上過濾非可打印字符
    " 當從一些 GUI 程序粘貼時會有用處
    :nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*p
    ----------------------------------------
    " 重新格式化文本
    gq} : 合并一個段落
    gqap : 當前段落
    ggVGgq : 全部段落
    Vgq : 當前行
    " 在70列的時候換行
    :s/.\{,69\};\s*\|.\{,69\}\s\+/&\r/g
    ----------------------------------------
    " 命令使用于多個文件
    :argdo %s/foo/bar/e : 在所有文件上操做 :args
    :bufdo %s/foo/bar/e
    :windo %s/foo/bar/e
    :argdo exe '%!sort'|w! : 包含外部命令
    ----------------------------------------
    " 命令行技巧
    gvim -h : 顯示幫助
    ls | gvim - : 管道操作
    cat xx | gvim - -c "v/^\d\d\|^[3-9]/d " : 從管道出過濾內容
    gvim -o file1 file2 : 分割窗口顯示兩個文件
    " 打開文件后執行一條命令
    gvim.exe -c "/main" joe.c : 打開 joe.c & 跳轉到 "main"
    " 在打開一個文件時執行多條命令
    vim -c "%s/ABC/DEF/ge | update" file1.c
    " 在一組文件上執行多條命令
    vim -c "argdo %s/ABC/DEF/ge | update" *.c
    " 從一系列文件中刪除一塊區域
    vim -c "argdo /begin/+1,/end/-1g/^/d | update" *.c
    " 自動編輯文件 (編輯命令序列Ex commands已經包含在convert.vim中了)
    vim -s "convert.vim" file.c
    #不加載.vimrc跟任何plugin(干凈清新的 VIM^_^)
    gvim -u NONE -U NONE -N
    " Access paste buffer contents (put in a script/batch file)
    gvim -c 'normal ggdG"*p' c:/aaa/xp
    " 將paste中的內容送往默認的打印機
    gvim -c 's/^/\=@*/|hardcopy!|q!'
    " gvim 里的 grep (win32 or *nix)
    :grep somestring *.php : 創建匹配的文件列表
    " 使用 :cn(向后后) :cp(向前) 操縱列表
    :h grep :查看幫助
    ----------------------------------------
    " GVIM 的差異比較
    gvim -d file1 file2 : vimdiff (比較不差異)
    dp : 把光標處的不同放到另一個文件
    do : 在光標處從另一個文件取得不同
    ----------------------------------------
    " Vim traps
    在正則表達式中 + | ( { 都要加上轉義符(反斜杠)
    /fred\+/ : 匹配 fred/freddy 但不匹配 free
    /\(fred\)\{2,3}/ : note what you have to break
    ----------------------------------------
    " \v ,或叫做very magic (通常都是這么叫)可以取消轉義符
    /codes\(\n\|\s\)*where : 普通的正則表達式
    /\vcodes(\n|\s)*where : very magic
    ----------------------------------------
    " 把對象送到命令行或者搜索行
    <C-R><C-W> : 執行當前光標下的單個單詞
    <C-R><C-A> : 執行當前光標下盡可能多的單詞
    <C-R>- : 送至一個小型寄存器(同樣使用于插入模式)
    <C-R>[0-9a-z] : 送至一個命名寄存器 (括弧同上)
    <C-R>% : 送至文件名(#也行) (同上)
    <C-R>=somevar : 送至一個變量 (例如 :let sray="ray[0-9]")
    ----------------------------------------
    " 控制寄存器
    :let @a=@_ : 清除寄存器 a
    :let @a="" : 同上 a
    :let @*=@a : 拷貝寄存器 a 到 paste buffer
    :let @*=@: : 拷貝最后執行的命令到 paste buffer
    :let @*=@/ : 拷貝最后執行的查找命令到paste buffer
    :let @*=@% : 拷貝當前文件到 paste buffer

    map <f11> "qyy:let @q=@q."zzz"
    ----------------------------------------
    " 幫助的幫助? (使用 TAB)
    :h quickref : VIM 快速參考頁
    :h tips : Vim'自己的技巧幫助
    :h visual<C-D><tab> : 虛擬模式的幫助列表
    : 然后使用tab選擇它們
    :h ctrl<C-D> : 所有關于ctrl鍵的幫助列表
    :helpg uganda : 過濾幫助文件 使用 :cn, :cp 查找下一個及后一個
    :h :r : 關于 :ex 的命令幫助
    :h CTRL-R : 普通模式相關
    :h /\r : \r是什么的意思
    :h \\zs : 使用雙反斜線查找關于 \zs 的幫助
    :h i_CTRL-R : 在插入模式中 <C-R>的解釋
    :h c_CTRL-R : 在命令模式中 <C-R> 的解釋
    :h v_CTRL-V : 虛擬模式
    :h tutor : VIM 快速指南
    <C-[>, <C-T> : Move back & Forth in HELP History
    gvim -h : VIM 命令行幫助
    ----------------------------------------
    " 選項設置在那里
    :scriptnames : 列出所有已經加載的 plugins, _vimrcs文件
    :verbose set history? :顯示 history的值并顯示在那里定義的
    :function : 列出所有函數
    :func SearchCompl : 顯示指定函數的細節
    ----------------------------------------
    " 制作你自己的VIM 幫助
    :helptags /vim/vim64/doc : 重新編譯所有 *.txt 的幫助文件在這個目錄里
    :help add-local-help :如何添加本地幫助
    ----------------------------------------
    " 用外部程序運行文件 (例如 php)
    map <f9> :w<CR>:!c:/php/php.exe %<CR>
    map <f2> :w<CR>:!perl -c %<CR>
    ----------------------------------------
    " 在另一個buffer中,捕捉當前腳本的輸出
    :new | r!perl # : 新建一個buffer,從另一個buffer中讀入結果
    :new! x.out | r!perl # : 同上,并指定一個新文件名
    :new+read!ls
    ----------------------------------------
    " create a new buffer, paste a register "q" into it, then sort new buffer
    :new +put q|%!sort
    ----------------------------------------
    " 插入DOS換行符
    :%s/$/\<C-V><C-M>&/g : (that's what you type
    :%s/$/\<C-Q><C-M>&/g : for Win32) 對于Win32應該這樣
    :%s/$/\^M&/g : 你看到的^M是一個字符
    ----------------------------------------
    " 自動刪除行尾 Dos回車符和空格
    autocmd BufRead * silent! %s/[\r \t]\+$//
    autocmd BufEnter *.php :%s/[ \t\r]\+$//e
    ----------------------------------------
    " 對指定文件或文件類型執行某個動作
    autocmd VimEnter c:/intranet/note011.txt normal! ggVGg?
    autocmd FileType *.pl exec('set fileformats=unix')
    ----------------------------------------
    " 把最后一個命令貼到當前位置
    i<c-r>:
    " 把最后一個搜索指令貼到當前位置
    i<c-r>/
    ----------------------------------------
    " 更多的完成功能
    <C-X><C-F> :插入當前目錄下的一個文件名到當前位置
    # 在insert模式下使用
    # 然后用 Ctrl-P/Ctrl-N 翻頁
    ----------------------------------------
    " 替換一個visual區域
    " 選擇一個區域,然后輸入 :s/Emacs/Vim/ 等等,vim會自動進入:模式
    :'<,'>s/Emacs/Vim/g : 前面的' '<.'> 是vim自動添加的
    gv : 重新選擇前一個可視區域 (ULTRA)
    ----------------------------------------
    " 在文件中插入行號
    :g/^/exec "s/^/".strpart(line(".")." ", 0, 4)
    :%s/^/\=strpart(line(".")." ", 0, 5)
    :%s/^/\=line('.'). ' '
    ----------------------------------------
    #用VIM的方式來編號行
    :set number : 顯示行號
    :map <F12> :set number!<CR> : Show linenumbers flip-flop
    :%s/^/\=strpart(line('.')." ",0,&ts)
    #從任意行開始編號(需要perl)
    :'a,'b!perl -pne 'BEGIN{$a=223} substr($_,2,0)=$a++'
    #產生數字列表
    #Type in number on line say 223 in an empty file
    qqmnYP`n^Aq : in recording q repeat with @q
    " 遞增已存在數字到文件末
    :.,$g/^\d/exe "normal! \<c-a>"
    " 高級遞增,參見:
    http://vim.sourceforge.net/tip_view.php?tip_id=150
    ----------------------------------------
    " 高級遞增 (真的很有用)
    " 把下面幾句放到 _vimrc
    let g:I=0
    function! INC(increment)
    let g:I =g:I + a:increment
    return g:I
    endfunction
    " 例如從mark a 到mark b 遞增,從223開始,步長為5
    :let I=223
    :'a,'bs/^/\=INC(5)/
    " create a map for INC
    cab viminc :let I=223 \| 'a,'bs/$/\=INC(5)/
    ----------------------------------------
    " 生成從 23-64 的數字列表
    o23<ESC>qqYp<C-A>q40@q
    ----------------------------------------
    " 在當前插入模式下編輯/移動 (真得很有用)
    <C-U> : 刪除全部
    <C-W> : 刪除最后一個單詞
    <HOME><END> : 移動到行首/行尾
    <C-LEFTARROW><C-RIGHTARROW> : 向前/后移動一個單詞
    <C-X><C-E>,<C-X><C-Y> : scroll while staying put in insert
    ----------------------------------------
    #加密(小心使用,不要忘了密碼)
    :X : vim會提示你輸入密碼
    :h :X
    ----------------------------------------
    " 模式行 (使文件只讀等),必須在前/后 5行內
    // vim:noai:ts=2:sw=4:readonly:
    " vim:ft=html: : 使用 HTML 語法高亮
    :h modeline
    ----------------------------------------
    " 建立你自己的菜單項
    amenu Modeline.Insert\ a\ VIM\ modeline <Esc><Esc>ggOvim:ff=unix ts=4 ss=4<CR>
    vim60:fdm=marker<esc>gg
    ----------------------------------------
    " 一個保存當前光標下的狹義字到一個文件的函數
    function! SaveWord()
    normal yiw
    exe ':!echo '.@0.' >> word.txt'
    endfunction
    map ,p :call SaveWord()
    ----------------------------------------
    " 刪除重復行的函數
    function! Del()
    if getline(".") == getline(line(".") - 1)
    norm dd
    endif
    endfunction

    :g/^/ call Del() #使用該函數的一個例子
    ----------------------------------------
    " 雙字節編碼 (non alpha-numerics)
    :digraphs : 顯示編碼表
    :h dig : 幫助
    i<C-K>e' : 輸入 é
    i<C-V>233 : 輸入 é (Unix)
    i<C-Q>233 : 輸入 é (Win32)
    ga : 查看字符的hex值
    #刪除非 ascii 字符
    :%s/[<C-V>128-<C-V>255]//gi : where you have to type the Control-V
    :%s/[?-?]//gi : Should see a black square & a dotted y
    :%s/[<C-V>128-<C-V>255<C-V>01-<C-V>31]//gi : All pesky non-asciis
    :exec "norm /[\x00-\x1f\x80-\xff]/" : same thing
    #Pull a non-ascii character onto search bar
    yl/<C-R>" :
    /[^a-zA-Z0-9_[:space:][:punct:]] : search for all non-ascii
    ----------------------------------------
    " 文件名自動完成 (例如 main_c.c)
    :e main_<tab> : tab 鍵完成
    gf : 打開光標處廣義字命名的文件 (normal模式)
    main_<C-X><C-F> : 文件名自動完成(insert模式)
    ----------------------------------------
    " Vim復雜使用
    " 交換兩個單詞
    :%s/\<\(on\|off\)\>/\=strpart("offon", 3 * ("off" == submatch(0)), 3)/g
    " 交換兩個單詞
    :vnoremap <C-X> <Esc>`.``gvP``P
    ----------------------------------------
    " 把text文件轉換成html文件(oh,ft)
    :runtime! syntax/2html.vim : 轉換 txt 成 html
    :h 2html
    ----------------------------------------
    " VIM 有一個內部自帶的 grep 命令
    :grep some_keyword *.c : 得到一個包含some_keyword的c文件名列表
    :cn : 去下一個出現的位置
    ----------------------------------------
    " 強制無擴展名的文件的語法著色方式
    :set syntax=perl
    " 取消語法著色 (很有用)
    :set syntax off
    " 改變色彩主題 (在~vim/vim??/colors中的任何文件)
    :colorscheme blue
    " 通過使用模式行強迫使用 HTML 語法高亮
    # vim:ft=html:
    " 強制自動語法加亮(非標準的文件擴展)
    au BufRead,BufNewFile */Content.IE?/* setfiletype html
    ----------------------------------------
    :set noma (non modifiable) : 防止修改
    :set ro (Read Only) : 只讀保護
    ----------------------------------------
    " 對話 (打開一堆文件)
    gvim file1.c file2.c lib/lib.h lib/lib2.h : 在"對話"中加載這些文件
    :mksession : 生成一個Session文件 (默認是Session.vim)
    :q
    gvim -S Session.vim : 重新加載所有文件
    ----------------------------------------
    #標記(tags) (跳轉到子程序/函數)
    taglist.vim : 很流行的插件
    :Tlist : 顯示標記 (函數列表)
    <C-]> : 跳轉到光標處的函數
    ----------------------------------------
    " columnise a csv file for display only as may crop wide columns
    :let width = 20
    :let fill=' ' | while strlen(fill) < width | let fill=fill.fill | endwhile
    :%s/\([^;]*\);\=/\=strpart(submatch(1).fill, 0, width)/ge
    :%s/\s\+$//ge
    " Highlight a particular csv column (put in .vimrc)
    function! CSVH(x)
    execute 'match Keyword /^\([^,]*,\)\{'.a:x.'}\zs[^,]*/'
    execute 'normal ^'.a:x.'f,'
    endfunction
    command! -nargs=1 Csv :call CSVH(<args>)
    " call with
    :Csv 5 : highlight fifth column
    ----------------------------------------
    " 折疊:隱藏某些片斷,使查看更容易
    zf} : 使用動作命令折疊一個段落
    v}zf : 使用可視模式折疊一個段落
    zf'a : 折疊到一個標記上
    zo : 打開折疊
    zc : 重新關閉折疊
    ----------------------------------------
    " 顯示"不可見字符"
    :set list
    :h listchars
    ----------------------------------------
    " 如何在不進入插入模式的情況下粘貼"普通模式的命令"
    :norm qqy$jq
    ----------------------------------------
    " 處理文件名
    :h filename-modifiers : 幫助
    :w % : 寫入當前文件
    :w %:r.cfm : 改變文件擴展名為 .cfm
    :!echo %:p : 顯示完整路徑和文件名
    :!echo %:p:h : 只顯示完整路徑
    :!echo %:t : 只顯示文件名
    :reg % : 顯示文件名
    <C-R>% : 插入文件名 (插入模式)
    "%p : 插入文件名 (普通模式)
    /<C-R>% : 在文本中查找文件名
    ----------------------------------------
    " 刪除,但不破壞 buffer 內容
    "_d : 你一直想要的東西
    "_dw : 例如:刪除一個單詞 (使用黑洞???)
    ----------------------------------------
    " 送完整的路徑名到剪貼板,用于郵件附件等
    nnoremap <F2> :let @*=expand("%:p")<cr> :unix
    nnoremap <F2> :let @*=substitute(expand("%:p"), "/", "\\", "g")<cr> :win32
    ----------------------------------------
    " 不用離開 Vim 就能修改文件名的簡單 shell 腳本
    $ vim
    :r! ls *.c
    :%s/\(.*\).c/mv & \1.bla
    :w !sh
    :q!
    ----------------------------------------
    " 在一個文本里計算單詞數
    g<C-G>
    ----------------------------------------
    " 你自己設置高亮顯示的例子
    :syn match DoubleSpace " "
    :hi def DoubleSpace guibg=#e0e0e0
    ----------------------------------------
    " reproduce previous line word by word
    imap ] @@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s
    nmap ] i@@@<ESC>hhkyWjl?@@@<CR>P/@@@<CR>3s
    " 根據文件類型映射快捷鍵
    :autocmd bufenter *.tex map <F1> :!latex %<CR>
    :autocmd bufenter *.tex map <F2> :!xdvi -hush %<.dvi&<CR>
    ----------------------------------------
    " 讀取 MS-Word 文檔,需要 antiword
    :autocmd BufReadPre *.doc set ro
    :autocmd BufReadPre *.doc set hlsearch!
    :autocmd BufReadPost *.doc %!antiword "%"
    ----------------------------------------
    " a folding method
    vim: filetype=help foldmethod=marker foldmarker=<<<,>>>
    A really big section closed with a tag <<<
    --- remember folds can be nested ---
    Closing tag >>>
    ----------------------------------------
    " Just Another Vim Hacker JAVH
    vim -c ":%s%s*%Cyrnfr)fcbafbe[Oenz(Zbbyranne%|:%s)[[()])-)Ig|norm Vg?"
    # 譯釋:呵呵,誰來解釋一下吧!
    # 其實不過是在啟動vim的時候執行了一個命令
    # 先寫入了 Just Another Vim Hacker 的rot13編碼
    # 然后再解碼

    posts - 104, comments - 33, trackbacks - 0, articles - 0

    Copyright © 林光炎

    主站蜘蛛池模板: 一级做a爰片性色毛片免费网站| ass亚洲**毛茸茸pics| 一级一级一级毛片免费毛片| 国产一区二区视频免费| 亚洲精品亚洲人成在线| 免费无码又爽又刺激聊天APP| 亚洲国产精品xo在线观看| 麻豆视频免费播放| 亚洲六月丁香婷婷综合| 啦啦啦在线免费视频| 粉色视频成年免费人15次| 亚洲国产激情一区二区三区| 国产精品美女免费视频观看| 国产亚洲A∨片在线观看| 国产精成人品日日拍夜夜免费| 91精品国产亚洲爽啪在线影院| 免费专区丝袜脚调教视频| 欧洲 亚洲 国产图片综合| 国产伦精品一区二区三区免费下载| 香港一级毛片免费看| 黑人精品videos亚洲人| **毛片免费观看久久精品| 亚洲中文字幕无码中文| 免费看国产曰批40分钟| 男人天堂免费视频| 亚洲一区免费在线观看| 亚洲国产成人久久综合区| 日韩在线永久免费播放| 亚洲综合在线一区二区三区| 亚洲国产精品成人久久蜜臀| 色欲色香天天天综合网站免费| 亚洲综合久久一本伊伊区| 在线a亚洲v天堂网2018| 精品成人免费自拍视频| 亚洲www在线观看| 狠狠色婷婷狠狠狠亚洲综合| 91九色视频无限观看免费| 亚洲男人的天堂网站| 亚洲中文久久精品无码| 久久久www成人免费毛片| 日韩少妇内射免费播放|