9.1 命令的記錄與回放
1. 操作步驟
a. q命令: 將後續的動作記錄到名為的暫存器中,其中給出的暫存器名字》必須是a到z之間的乙個字母.
b. 執行你要執行的操作,按下q以結束對命令的記錄.
c. @命令:執行剛剛記錄下來的巨集.
2. 舉個例子
#include "stdio.h"
#include "fcntl.h"
#include "unist.h"
#include "stdli.h"
詳細的操作步驟:
qa :開始將後續的命令記入到暫存器a中.
^ :將游標移到行首.
i#include ":在該行之前插入#include.
$ :將游標移動到行尾.
a.h":在行尾加上.h"字元.
j :移動到下一行.
q :停止記錄.
@a :執行記錄的巨集,可以加計數命令,3@a.
@@ :重複上一次巨集的命令.
3. 編輯巨集的內容
a. "ap命令 :顯示巨集的內容
b. "ad$命令 :將編輯好的巨集的內容再一次的放入暫存器中.
c. qa命令 :向暫存器a中追加內容.
9.2 替換
1. 通用形式
:[range]subtitute/from/to/[flags] :對乙個指定的範圍執行替換操作,range指範圍,from被替
換的內容,與搜尋命令所用的正規表示式類似,to替換為的內容,flags指一些常用的標記.
如:s/the /these /g
the these the these the these the these
如:s/one\/two/one or two/g
s=one/two=one or two=g 功能一樣.
one/two one/two one/two one/two one/two one/two
2. 常用選項
range :作用範圍,range=% 範圍為所有行,而預設只作用於當前行.
flags :標記,flags=g (global) 將改變一行所有符合目標字串的全部字元進行替換.
flags=c (confirm):在執行每個替換前請求使用者確認
y 好吧,yes 直接進行替換
n 不,no 先留下
a 全部,all
q 退出,quit
l 把現在這個修改結束後進行退出,last
ctrl-e 向上滾屏一行
ctrl-y 向下滾屏一行
9.3 命令的作用範圍 range的範圍
:45,49s/this/that/g :對第45行到第49行的文字執行替換操作.
:33s/this/that/g :對指定行進行替換操作.
:.,$s/this/that/g :當前行到最後一行範圍,如%=1,$.
:?^chapter?,/^chapter/s=this=that=g :使用搜尋模式來指定作用範圍.
:?^chapter?+1,/^chapter/-1s=this=that=g :增與減行的範圍操作.
:.+3,$-5s/this/that/g :將當前行的下三行到倒數第六行的作用操作.
:'t,'bs/this/that/g :使用標記確定操作範圍.
:'<,'>s/this/that/g :visual模式確定的範圍.
:'>,$s/this/that/g :從上一次visual模式時選定的文字區域的結束處到文字尾的這樣區域
:.,.+4s/this/that/g :.代表當前行到.+4從當前行到向下的4行,一共5行.
9.4 全域性命令
:[range]global// :找到符合某個匹配模式的行,然後將命令作用於這些行上,全域性命令的預設作用範圍是整個檔案.
:g=//=s/foobar/barfoo/g :整個檔案中包含//的行,進行替換操作.
:g=//=d :整個檔案中包含//的行,進行刪除操作.
9.5 visual block模式
1. 插入文字
istring:在文字塊的每行的行首,進行插入文字.
astring:在文字塊的每行的行尾,進行插入文字.
2. 改變文字
cstring:修改文字塊的文字,僅會修改文字塊的內容.
cstring:修改文字塊的文字,會修改文字塊尾部的內容.
3. 改變文字在大小寫
~ :交換大小寫 (abc->abc)
u :將小寫變大寫 (abc->abc)
u :將大寫變小寫 (abc->abc)
4. 填充命令
rx命令: 以字元x進行文字塊的填充操作.
5. 左右移動
《命令 :會使你的文字向左移動乙個shift單位.
>命令 :會使你的文字向右移動乙個shift單位.
:set shiftwidth=4
6. 將多行內容粘接起來
j命令 :使文字塊縱跨的所有文字被連線為一行.
gj命令 :如果你想保留那些前導空白和字尾的空白時,可以使用.
9.6 讀寫檔案
1. 讀取檔案
:read filename :讀入檔案的內容放在當前行.
:$read filename :追加到檔案的最後.
:0read filename :把檔案放在第一行的上面.
:80read filename :把檔案放在指定行的上面.
2. 寫入檔案
:write filename :沒有指定乙個範圍時該命令將寫入整個檔案的內容.
:.,$write filename :當前行到檔案尾的內容寫入檔案,如果檔案存在則失敗.
:.,$write! filename :強制當前行到檔案尾的內容寫入檔案,會進入覆蓋操作.
:.write filename :將當前行寫入檔案中.
:.write >> filename :將當前行的內容追加到檔案中.
9.7 格式化文字
:set textwidth=72 :鍵入文字的時候每行的內容能自動調節到適應當前設定的寬度,每一行都》會自動調整到只包含最多72個字元,vim進行格式化時不會打斷你的單詞.
:gqap :gq為vim的乙個格式化操作符,ap是乙個本文物件,a paragraph.
:gg gqg :格式化整個檔案的內容.
:gqgq :格式化當前行,可以與.重複命令一起使用.
:gqj :格式化當前行和它下面的一行.
9.8 改變大小寫
guw命令 :gu是變小寫的操作符,w是位移.
guw命令 :gu是變大寫的操作符,w是位移.
g~w命令 :將字母的大小寫進行反轉,大寫變小寫,小寫變大寫.
gugu命令 :使一整行變為小寫,簡寫為guu,同理gugu guu g~g~ g~~.
9.9 使用外部程式
sort < input.txt > output.txt
!5gsort :!過濾操作符,5g為移動命令,決定了將哪個區域送到過濾程式中.
!!date :!!命令過濾當前行,date命令顯示當前時間.
:read !ls :讀取當前目錄下的內容.
:write !wc :將文字寫入乙個命令wc中,wc命令是統計行數,單詞數,字元數.
大刀闊斧,抽絲剝繭 評紅黑樹系列文章
大刀闊斧,抽絲剝繭 評紅黑樹系列文章 二零一一年一月三十日 i 教你透徹了解紅黑樹 ii 紅黑樹演算法的層層剖析與逐步實現 iii 教你徹底實現紅黑樹 紅黑樹的c原始碼實現與剖析 iv 一步一圖一 一定要讓你真正徹底明白紅黑樹 眾所周知,紅黑樹作為二叉查詢樹的一種,在linux核心中,在眾多的資料結...
大刀闊斧,抽絲剝繭 評紅黑樹系列文章
大刀闊斧,抽絲剝繭 評紅黑樹系列文章 二零一一年一月三十日 i 教你透徹了解紅黑樹 ii 紅黑樹演算法的層層剖析與逐步實現 iii 教你徹底實現紅黑樹 紅黑樹的c原始碼實現與剖析 iv 一步一圖一 一定要讓你真正徹底明白紅黑樹 眾所周知,紅黑樹作為二叉查詢樹的一種,在linux核心中,在眾多的資料結...
vim學習筆記
首先安裝vim,接著進行最基本命令的聯絡。在命令列模式下輸入 vimtutor 會開啟乙個文件,按照文件上的步驟進行最基本的使用練習。1 檢視文件編碼 開啟乙個在windows下的文字時中文顯示亂碼,於是網上搜了一下,首先是檢視編碼 set fileencoding 2 查詢替換 s aaa bbb...