點(diǎn)擊上方“C語言與CPP編程”,選擇“關(guān)注/置頂/星標(biāo)公眾號(hào)”
干貨福利,第一時(shí)間送達(dá)!
最近有小伙伴說沒有收到當(dāng)天的文章推送,這是因?yàn)槲⑿鸥牧送扑蜋C(jī)制,導(dǎo)致沒有星標(biāo)公眾號(hào)的小伙伴刷不到當(dāng)天推送的文章,無法接收到一些比較實(shí)用的知識(shí)和資訊。所以建議大家加個(gè)星標(biāo)??,以后就能第一時(shí)間收到推送了。
鏈接:https://www.cnblogs.com/xyh9039/p/18327652
本章將和大家分享Linux系統(tǒng)中的Vim編輯器。廢話不多說,下面我們直接進(jìn)入主題。
Vim 帶有完整的幫助文檔:進(jìn)入 Vim 后輸入“:help”即可訪問

與大部分其它編輯器不同,進(jìn)入 Vim 后,缺省狀態(tài)下鍵入的字符并不會(huì)插入到所編輯的文件之中。Vim 的模式(mode,可以簡單地理解為“狀態(tài) ”)概念非常重要。需要知道 Vim 有以下幾個(gè)模式:
正常(normal)模式,缺省的編輯模式;下面如果不加特殊說明,提到的命令都直接在正常模式下輸入;任何其它模式中都可以通過鍵盤上的 Esc 鍵回到正常模式。
命令(command)模式,用于執(zhí)行較長、較復(fù)雜的命令;在正常模式下輸入“:”(一般命令)、“/”(正向搜索)或“?”(反向搜索)即可進(jìn)入該模式;命令模式下的命令要輸入回車鍵(Enter)才算完成。
插入(insert)模式,輸入文本時(shí)使用;在正常模式下鍵入“i”(insert)或“a”(append)即可進(jìn)入插入模式(也有另外一些命令,例如:“c”,也可以進(jìn)入插入模式,但這些命令有其它的作用)。
可視(visual)模式,用于選定文本塊;可以在正常模式下輸入“v”(小寫)來按字符選定,輸入“V”(大寫)來按行選定,或輸入“Ctrl-V”來按方塊選定。
選擇(select)模式,與普通的 Windows 編輯器較為接近的選擇文本塊的方式;在以可視模式和選擇模式之一選定文本塊之后,可以使用“Ctrl-G”切換到另一模式 —— 該模式很少在 Linux 上使用,本文中就不再介紹了。


i 光標(biāo)所在位置插入
I 光標(biāo)所在位置行首插入
o 光標(biāo)所在位置下方新開一行插入
O 光標(biāo)所在位置上方新開一行插入
a 光標(biāo)所在位置下一個(gè)字符的位置插入
A 光標(biāo)所在位置行行尾插入
[root@localhost myfolder]# ll
總用量 4
-rw-r--r--. 1 root root 152 7月 27 23:28 file1
[root@localhost myfolder]# vim file1
使 Vim 開始編輯一個(gè)名為 file1 的文件,屏幕上看起來大致是這樣:

1)“黑色塊”代表當(dāng)前光標(biāo)位置;
2)上波浪線(~)表示所在行并不是文件內(nèi)容的一部分。換句話說,Vim 將文件之外的部分顯示為波浪線;
3)在窗口的底部,一個(gè)消息行顯示說當(dāng)前正在編輯的文件叫 file1,它有27行,152個(gè)字符,當(dāng)前光標(biāo)所在位置為第21行的第1位。
如果是新文件呢?
[root@localhost myfolder]# vim file

在窗口的底部,一個(gè)消息行顯示說當(dāng)前正在編輯的文件叫file,并且它是一個(gè)新文件。
Vim 編輯器是一個(gè)模式編輯器。這意味著在不同狀態(tài)下編輯器有不同的行為模式。兩個(gè)基本的模式 Normal 模式和 Insert 模式。在 Normal 模式下你輸入的每一個(gè)字符都被視為一個(gè)命令。而在 Insert 模式下輸入的字符都作為實(shí)際要輸入的文本內(nèi)容。剛啟動(dòng)時(shí) Vim 工作于 Normal 模式。要進(jìn)入 Insert 模式你需要使用“i”命 令(i 意為 Insert),接下來就可以直接輸入了。別怕出錯(cuò),錯(cuò)了還可以修改。

編輯內(nèi)容時(shí)使用 回車鍵 換行,編輯完成后按下 Esc 鍵退出 Insert 模式,回到 Normal 模式。
要知道你現(xiàn)在所處的工作模式是什么,打開顯示模式的開關(guān):
:set showmode:set noshowmode 關(guān)閉顯示模式

你會(huì)看到按下冒號(hào)鍵之后當(dāng)前光標(biāo)跑到窗口的最后一行去了。那是使用冒號(hào)命令的地方(顧名思義,冒號(hào)命令就是總是以冒號(hào)打頭的命令)。最后按下回車鍵結(jié)束整個(gè)命令(所有的冒號(hào)命令都以這種方式表明命令的結(jié)束)。
現(xiàn)在,如果你輸入了“i”命令 Vim 就會(huì)在窗口底部顯示—INSERT—(插入)。這表明你目前處于 Insert 模式。如果按下 Esc 鍵返回到 Normal 模式,則剛才顯示出來的模式—INSERT—就會(huì)消失;Normal 模式并不會(huì)顯示—NORMAL—,作為默認(rèn)的工作模式它不顯示任何字符串。
不管你當(dāng)前所處的模式是什么,按下 Esc 鍵都會(huì)讓你回到 Normal 模式(即使已經(jīng)在 Normal 模式下)。有時(shí)需要按兩次,如果 Vim 以一聲蜂鳴回答你,那說明你已經(jīng)是在 Normal 模式了。
回到 Normal 模式后,你就可以用下面的命令來移動(dòng)光標(biāo):
h 左
j 下
k 上
l 右
備注:同時(shí)你還可以用箭頭鍵來移動(dòng)光標(biāo)。不過這樣做實(shí)際上會(huì)大大降低你的效率,因?yàn)橛眠@些鍵你需要不停地在字母區(qū)和箭頭鍵之間頻繁轉(zhuǎn)換。
在 Normal 模式下要?jiǎng)h除一個(gè)字符,只需要將光標(biāo)移到該字符的前面,然后按下“x”。
在 Normal 模式下要?jiǎng)h除一行,使用“dd”命令。
命令“u”可以撤消上一次的操作。
如果你撤消了多次,你還可以用 CTRL R 來反轉(zhuǎn)撤消的動(dòng)作,即反撤消。
撤消命令還有另一種形式,大寫的“U”命令,它一次撤消對(duì)一行的全部操作。第二次使用該命令則會(huì)撤消前一個(gè)“U”的操作。
另起一行 o/O (在 Normal 模式下):
“o”命令可以在當(dāng)前行的下面另起一行,并使當(dāng)前模式轉(zhuǎn)為 Insert 模 式。這樣你可以在該命令之后直接輸入內(nèi)容。
“O”命令(注意是大寫的字母O)將在當(dāng)前行的上面另起一行,并使當(dāng)前模式轉(zhuǎn)為 Insert 模 式。
在 Normal 模式下要退出 Vim,可以使用“ZZ”命令。
放棄所有修改可以使用 :q! 命令。
放棄所有修改并重新載入可以使用 :e! 命令。
保存并退出可以使用 :wq 或 :wq!(強(qiáng)制保存退出) 命令。
在 Normal 模式下,“G”命令指定一個(gè)命令計(jì)數(shù),這個(gè)命令就會(huì)把光標(biāo)定位到由命令計(jì)數(shù)指定的行上,比 如“33G”就會(huì)把光標(biāo)置于第 33 行上。
“G”命令會(huì)把光標(biāo)定位到最后一行上。
“gg”命令是跳轉(zhuǎn)到第一行的快捷方法,和“1G”的效果是一樣的。
1)“/string”命令,可用于搜索一個(gè)字符串,例如:要找到單詞“mysql”,則可以使用命令:“/mysql”。
要查找上次查找的字符串的下一個(gè)位置,使用“n”命令。如果你知道你要找的確切位置是目標(biāo)字符串的第幾次出現(xiàn),還可以在“n”之前放置一個(gè)命令計(jì)數(shù),例如:“3n”則會(huì)去查找目標(biāo)字符串的第3次出現(xiàn)。向光標(biāo)所在位置以上查找用大寫的“N”。
2)“?string”命令,“?”命令與“/”的工作相同,只是搜索方向相反。
3)忽略大小寫,可以通過設(shè)置“ignorecase”選項(xiàng):
:set ignorecase //忽略大小寫:set noignorecase //取消忽略大小寫
4)查找結(jié)果高亮顯示
:set hlsearch //查找結(jié)果設(shè)置為高亮顯示:set nohlsearch //取消高亮顯示:nohlsearch //只去掉當(dāng)前的高亮顯示
要把文本內(nèi)容從一處復(fù)制到另一處:
先刪除 dd 再粘貼 p
“y”操作符命令會(huì)把文本復(fù)制到一個(gè)寄存器中,然后可以用“p”命令把它取回。
“y”命令:
“yw”來復(fù)制一個(gè)word;
“y2w”命令復(fù)制兩個(gè)word;
“yy”復(fù)制一行;
“3yy”復(fù)制光標(biāo)所在行和向下的行,一共三行。
:s/UNIX/linux 對(duì)光標(biāo)所在行第一個(gè)出現(xiàn)的 UNIX 替換成 linux
:s/UNIX/linux /g 對(duì)光標(biāo)所在行所有 UNIX 都替換成 linux ,g 表示全行替換
:% s/UNIX/linux /g 將全文中的 UNIX 都替換成 linux ,其中“%”指定該命令將作用于所有行上
如果我們沒有通過 q 退出,而是通過其他方式強(qiáng)行退出,比如說直接關(guān)終端,會(huì)導(dǎo)致 vim 的一個(gè)報(bào)錯(cuò),當(dāng)我們下次打開這個(gè)文件的時(shí)候,會(huì)提示:
E325: 注意發(fā)現(xiàn)交換文件 ".file.swp"所有者: root 日期: Sun Jul 28 19:43:04 2024文件名: ~root/myfolder/file修改過: 是用戶名: root 主機(jī)名: localhost.localdomain進(jìn)程 ID: 3884正在打開文件 "file"日期: Sun Jul 28 17:25:26 2024(1) Another program may be editing the same file. If this is the case,be careful not to end up with two different instances of the samefile when making changes. Quit, or continue with caution.(2) An edit session for this file crashed.如果是這樣,請(qǐng)用 ":recover" 或 "vim -r file"恢復(fù)修改的內(nèi)容 (請(qǐng)見 ":help recovery")。如果你已經(jīng)進(jìn)行了恢復(fù),請(qǐng)刪除交換文件 ".file.swp"以避免再看到此消息。交換文件 ".file.swp" 已存在!以只讀方式打開([O]), 直接編輯((E)), 恢復(fù)((R)), 刪除交換文件((D)), 退出((Q)), 中止((A)):
這是因?yàn)?vim 他不是實(shí)時(shí)寫入的機(jī)制,他會(huì)先把文件寫到內(nèi)存,等我們執(zhí)行 w 操作以后,再寫回到原文件。那么在寫回原文件,或者執(zhí)行 q 的放棄操作之前,會(huì)生成一個(gè)臨時(shí)的文件,以 . 開頭,以 .swp 結(jié)尾。當(dāng)我們看到這種情況,就說明這個(gè)文件是在被編輯的過程中強(qiáng)制退出的,或者是正在被人編輯。
所以這個(gè)文件的作用就是防止強(qiáng)制退出造成的數(shù)據(jù)安全隱患,和防止文件同時(shí)被多次修改。
我們可以根據(jù)他的提示執(zhí)行相應(yīng)的操作,比如說 Q 退出。如果想要順利編輯這個(gè)文件的話,一方面可以使用 E 直接編輯,或者先退出,把 swp 文件刪除了以后再編輯也是可以的。
注意:使用 vim 需要注意一下權(quán)限問題,必須要有讀寫權(quán)限才能使用 vim 。
可以看一下沒有寫權(quán)限和沒有讀權(quán)限會(huì)出現(xiàn)什么問題。
—— EOF —— 你好,我是飛宇。日常分享C/C++、計(jì)算機(jī)學(xué)習(xí)經(jīng)驗(yàn)、工作體會(huì),歡迎點(diǎn)擊此處查看我以前的學(xué)習(xí)筆記&經(jīng)驗(yàn)&分享的資源。
我組建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起進(jìn)群交流。
歡迎你添加我的微信,我拉你進(jìn)技術(shù)交流群。此外,我也會(huì)經(jīng)常在微信上分享一些計(jì)算機(jī)學(xué)習(xí)經(jīng)驗(yàn)以及工作體驗(yàn),還有一些內(nèi)推機(jī)會(huì)。
加個(gè)微信,打開另一扇窗
經(jīng)常遇到有讀者后臺(tái)私信想要一些編程學(xué)習(xí)資源,這里分享?1T 的編程電子書、C/C++開發(fā)手冊(cè)、Github上182K+的架構(gòu)路線圖、LeetCode算法刷題筆記等精品學(xué)習(xí)資料,點(diǎn)擊下方公眾號(hào)會(huì)回復(fù)"編程"即可免費(fèi)領(lǐng)取~
感謝你的分享,點(diǎn)贊,在看三連??