文章目錄
這裏是一段防爬蟲文本,請讀者忽略。
本文原創首發於CSDN,作者IDYS
博客首頁:https://blog.csdn.net/weixin_41633902/
本文鏈接:https://blog.csdn.net/weixin_41633902/article/details/105711166
- 寫在開頭的話
- 請記住:實踐是掌握知識的最快方法
- 如果你只是懷着看看的態度去快速瀏覽文章,而不去認認真真的把文章裏面講的任何一個知識點去實踐一遍,那麼你永遠也掌握不了它
- 生命不息,折騰不止!
- vim編輯器
- vim編輯器簡介
- vim編輯器的前身爲vi編輯器
- vim:vi IMproved
- vi全稱:Visual Interface
註明:vi編輯器只是一個文本編輯器
- 文本常見的字符編碼方案有:
- ASCII,Unicode
- Unicode編碼的三種具體實現
- UTF-8:佔用一到四個字節
- UTF-16:佔用二到四個字節
- UTF-32:佔用四個字節
- vim編輯器可以打開並且識別所有的文本文件
註明:不要企圖用vim編輯器打開二進制文件
- 文本編輯種類
- 行編輯器:sed
- 全屏編輯器:nano,vi
- vim的使用
- vim的三種模式
- 編輯模式(命令模式)
- 輸入模式
- 末行模式(底行模式)
vim打開時的默認模式是編輯模式
- vim打開文件的方式
- vim [OPTION]… FILE…
- +# : 打開文件後,直接讓光標處於第#行的行首
[xiao@dayuanshuai ~]$ vim +30 /etc/services #使用案例,使用後光標直接定位於該文件的第30行
- +/PATTERN:打開文件後,直接讓光標處於第一個被PATTERN匹配到的行的行首
[xiao@dayuanshuai ~]$ vim +/tcp /etc/services #使用案例
- +: 打開文件後,讓光標處於文件最後一行
[xiao@dayuanshuai ~]$ vim + /etc/services #打開/etc/service文件後,光標處於最後一行
- vim的模式轉換
- 編輯模式到輸入模式
- i:insert,在光標所在處前面輸入
- a:append,在光標所在處後面輸入
- o:open,在當前光標所在行的下方打開一個新行
- I:在當前光標所在行的行首輸入
- A:在當前光標所在行的行尾輸入
- O:在當前光標所在行的上方打開一個新行輸入
- c:
- C:
- 輸入模式到編輯模式
- 敲擊 ESC鍵
- 編輯模式到末行模式
- 鍵入 :
- 末行模式到編輯模式
- 當末行模式只有一個 : 時,直接鍵入ESC鍵
- 當末行模式除了 : 之外,還輸入了內容,比如這樣
:/s/g
,這時鍵入兩次ESC鍵即可
-關閉文件
-
:q 退出
-
:q! 強制退出,丟棄做出的修改
-
:wq 保存退出
-
:x 保存退出
-
:w /PATH/SOMEWHERE
-
命令模式下鍵入ZZ —— 保存退出
- 光標跳轉
- 字符間跳轉:h,j,k,l
- h:左
- l: 右
- j: 下
- k:上
- #COMMAND:跳轉由#指定個數的字符
#例如
4 h #向左移動四個光標
5 j #向下移動5個光標
6 k #向上移動6行
7 l #向右移動7個光標
- 單詞間跳轉
- w 光標跳轉至後一個單詞的詞首
- e 光標跳轉至當前單詞或者下一個單詞的詞尾
- b 光標跳轉至當前單詞或者前一個單詞的詞首
- #COMMAND: 跳轉由#指定個數的單詞數
#舉例
3 w #向後跳轉3個單詞數,並且光標移到單詞首部
4 b #向前跳轉4個單詞數,並且光標移到單詞首部
5 e #向後跳轉5個單詞數,並且光標移到單詞尾部
- 行首行尾跳轉
-
^: 跳轉至行首的第一個非空白字符
-
0: 跳轉至行首
-
$: 跳轉至行尾
- 行間移動
-
#G:跳轉至由#指定的行
-
G:最後一行
-
1G,gg:第一行
- 句間移動
- ):跳轉至下一句
- (:跳轉至上一句
- 段落間移動
- }:跳轉至下一段落
- {:跳轉至上一段落
-vim的編輯命令
字符編輯
- x:刪除光標處的字符
- #x:刪除光標處起始的#個字符
- xp:交換光標所在處的字符及其後面字符的位置
刪除命令
- d:刪除命令,可結合光標跳轉字符,實現範圍刪除
- d$
- d^
- d0
- dw
- de
- db
- #COMMAND
# 例子
3,d,e #刪除當前光標往後至三個單詞詞尾的部分
3,d,w #刪除當前光標往後三個單詞詞首的部分
4,d,b #刪除當前光標往前4個單詞詞首的部分
- dd:刪除光標所在行
- #COMMAND
- D:刪除光標所在行的所有字符,但保留該行
粘貼命令
- 粘貼命令(p,put,paste)
- p:緩存區存的如果爲整行,則粘貼到當前光標所在行的下方。否則,則粘貼至當前光標所在處的後面
- P:緩存區存的如果爲整行,則粘貼到當前光標所在行的上方。否則,則粘貼至當前光標所在處的前面
複製命令(y,yank)
- y:複製,工作行爲相似於d命令
- y$
- y0
- y^
- ye
- yw
- yb
- #COMMAND
- yy:複製整行
- #yy:複製多行
改變命令(c,change)
- c:修改(類似於d命令,不過比d命令多了一個操作)
- 執行 c 命令時,會從編輯模式轉爲輸入模式
- cc:刪除整行,然後轉爲輸入模式
- c$
- c^
- c0
- ce
- cw
- cb
- #COMMAND
替換命令(r,replace)
- r:替換光標所在處的字符
- 其他編輯操作
- 可視化命令
-
v:按字符選定
-
V:按行選定
他們經常結合編輯命令使用
d,c,y
- 撤銷此前的編輯
-
u(undo):撤銷此前的操作
-
#u:撤銷指定的次數
- 撤銷此前的撤銷
- Ctrl+r
- 重複前一個編輯操作
- .
- 翻屏操作
-
Ctrl+f:向文件尾部翻一屏
-
Ctrl+b:向文件首部翻一屏
-
Ctrl+d:向文件尾部翻半屏
-
Ctrl+u:向文件首部翻半屏
- vim自帶的練習教程(有中文版)
- vimtutor 輸入該命令,即可進入教程
- vim中的末行模式
- 內建的命令行接口
- 地址定界
- start_pos,end_pos
- #:具體第#行,例如2表示第2行
- #,#:從左側#表示行起始,到右側#表示行結尾
- #,+#:從左側#表示的行起始,加上右側#表示的行數。如:1,+3
- $:最後一行
- .,$-1:當前行開始到最後一行的上一行
- %:全文,相當於1,$
- /pat1/,/pat2/:
- 從第一次被pat1模式匹配到的行開始,一直到第一次被part2匹配到的行結束
- /pat/,$
- 使用方式:後跟一個編輯命令
- d
- y
- w /PATH/SOMEWHERE:將範圍內的行另存至指定文件中
- r /PATH/FROM/SOMEFILE:在指定位置插入指定文件的所有內容
:1,3w ./vim.txt #將該文本的一到三行保存到當前目錄下的vim.txt文件中
:100r /etc/issue #在100行上插入/etc/issue的內容
- 查找
- /PATTERN:從當前光標所在處向文件尾部查找
- ?PATTERN:從當前光標所在處向文件首部查找
- n:與查找命令方向相同
- N:與查找命令方向相反
- 查找並且替換
- s:在末行模式下完成查找替換操作
- s/要查找的內容/替換的內容/修飾符
- 要查找的內容:可使用模式
- 替換的內容:不能使用模式,但可以使用/1,/2,/3…等後向引用符號,還可以使用“&”引用前面查找時查找到的整個內容
- 修飾符:
- i:忽略大小寫
- g:全局替換;默認情況下,每一行只替換第一次出現
# 舉例
:.,$s/r\(..\)t/R\1T/g #.代表單個字符,\1後向引用
:%s/1...x/&er/g #&引用前面查找時查找到的內容
:1,10s/how/HOW/g #在第一行到第十行將查找到的how替換爲HOW
:%s\/etc\/fstab/\/var\/log/g
- 查找替換中的分隔符/可以替換爲其它字符,例如:
- s@@@
- s###
:%s@/var/log@/etc/fstab@g #全局將/var/log替換爲/etc/fatab
- 多文件模式
- vim FILE1 FILE2 FILE3
- :next 下一個
- :prev 前一個
- :first 第一個
- :last 最後一個
- :wall 保存所有
- :qall 退出所有
- 窗口分隔模式
- vim -o|-O FILE1 FILE2 …
- -o:水平分隔
- -O:垂直分隔
- 在窗口間切換:Ctrl+w,Arrow
- 單文件窗口分割
- Ctrl+w,s:split,水平分割
- Ctrl+w,v:vertical,垂直分割
- 定製vim的工作特性
-
配置文件:永久有效
- 全局:/etc/vimrc
- 個人:~/.vimrc
-
末行:當前vim進程有效
- 行號
-
顯示:set number,簡寫爲set nu
-
取消顯示:set nonu
- 括號匹配
- 匹配:set showmatch,簡寫爲set sm
- 取消:set nosm
- 自動縮進
- 啓用:set ai 全稱爲:auto intent
- 禁用:set noai
- 高亮搜索
- 啓用:set hlsearch
- 禁用:set nohlsearch
- 語法高亮
- 啓用:syntax on
- 禁用:syntax off
- 忽略字符大小寫
-
啓用:set ic
-
禁用(不忽略):set noic
獲取幫助
- :help
- 練習題
- 複製/etc/grub2.cfg至/tmp/目錄,用查找替換命令刪除/tmp/grub2.cfg文件中的行首的空白字符
#其中一種做法
:%s/^[[:space:]]\+//g
- 複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令爲/tmp/functions的每行開頭爲空白字符的行的行首添加一個#號;
#做法
:%s/^[[:space:]]\+/#&/g
- 設置tab縮進爲4個字符
:set tabstop=4
- 複製/etc/rc.d/init.d/functions文件至/tmp目錄;替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log;
:%s@/etc/sysconfig/init@/var/log@g #前面說過可以使用@作爲分隔符,當使用@作爲分隔符/就不需要轉義了
- 刪除/tmp/functions文件中所有以#開頭,且#後面至少有一個空白字符的行的行首的#號
:%s@^#\([[:space:]]\+\)@\1@g
- 寫在最後的話:
- 無論每個知識點的難易程度如何,我都會盡力將它描繪得足夠細緻
- 歡迎關注我的CSDN博客,IDYS’BLOG
- 持續更新內容:運維 | 網工 | 軟件技巧
- 如果你有什麼疑問,或者是難題。歡迎評論或者私信我。你若留言,我必回覆!
- 雖然我現在還很渺小,但我會做好每一篇內容。謝謝關注!