上個月組內來了一個新的小夥伴,趕巧那個時候我休假了!當我休完假來的時候,這個新小夥伴成了我同桌,而後就是一塊兒作項目咯。就在昨天咱們在配置環境,修改各類配置文件的時候;小夥伴看到我各類vim的快捷指令使用,有點驚訝了:「臥槽,你怎麼作到記得這麼清楚的?這誰能記得住?教教我唄?」。json
其實很簡單:多寫多用多練,例如:以前的一個同事,寫代碼只用vim編輯模式,我就是從這來學來的。vim
關於liunx下vim指令,我剛畢業的時候畫過一張思惟導圖(這麼久了我覺得沒有刪除,雲盤居然被清理了),不過能夠按照下面的知識點,一個個看一遍且本地操做一遍。🤣 😏 😜緩存
咱們先來看看咱們本機vim的配置文件信息,我這裏是mac端:markdown
① liunix端 vim ~/.vimrc
| mac端 vim /usr/share/vim/vimrc
進入配置文件編輯器
若是不知道vimrc
文件在哪,可以使用 :scriptnames
來查看,例如:函數
① vim hello.lua
② :scriptnames 會出現以下列表:
1: /usr/share/vim/vimrc -- 這個就是本機的一個配置文件
2: /usr/share/vim/vim80/defaults.vim
3: /usr/share/vim/vim80/plugin/getscriptPlugin.vim
..................................................
13: /usr/share/vim/vim80/plugin/vimballPlugin.vim
14: /usr/share/vim/vim80/plugin/zipPlugin.vim
複製代碼
咱們來看看默認的配置項:動畫
" Configuration file for vim
set modelines=0 " CVE-2007-2438
" Normally we use vim-extensions. If you want true vi-compatibility
" remove change the following statements
set nocompatible " Use Vim defaults instead of 100% vi compatibility
set backspace=2 " more powerful backspacing
" Don't write backup file if vim is being called by "crontab -e"
au BufWrite /private/tmp/crontab.* set nowritebackup nobackup
" Don't write backup file if vim is being called by "chpass"
au BufWrite /private/etc/pw.* set nowritebackup nobackup
let skip_defaults_vim=1
set nu " 行號
set tabstop=4 " 一個tab爲4個空格長度
set ai " 設置自動縮進
syntax on " 高亮
" Source a global configuration file if available
if filereadable("/etc/tmp/vim/config/vimrc.local") -- 我本地最常使用的配置,默認不修改配置,將須要的配置,以另外文件的形式加載進來
source /etc/tmp/vim/config/vimrc.local
endif
" 當新建 .h .c .hpp .cpp .mk .sh等文件時自動調用SetTitle函數
autocmd BufNewFile *.[ch],*.hpp,*.cpp,Makefile,*.mk,*.sh exec ":call SetTitle()"
" 加入註釋
""定義函數SetTitle,自動插入文件頭
func SetTitle()
if &filetype == 'sh'
call setline(1, "#================================================================") -- 分隔符
call setline(2, "# ")
call setline(3, "# file Name:".expand("%:t")) -- 文件名稱
call setline(4, "# copyright@ Author:我是阿沐") -- 建立文件人名稱
call setline(5, "# created Time:".strftime("%c")) -- 建立日期
call setline(6, "# mail: "2511221051@qq.com) -- 建立人郵箱
call setline(7, "# desc:") -- 文件功能描述
call setline(8, "#")
call setline(9, "#================================================================")
call setline(10,"#!/bin/sh") -- 文件類型
call setline(11, "")
call setline(12, "")
endif
endfunc
### 還有不少的命令
複製代碼
咱們都知道vim是有三種狀態,分別是命令行模式(command mode
)、輸入模式(Insert mode
)和底線命令模式(last line mode
),這 3 種工做模式可隨意切換,以下圖所示:ui
咱們使用vim編輯文件的時候,默認進入文件是命令行模式;在此模式下,可使用鍵盤上的方向鍵:上
、下
、左
、右
鍵 或者 k
、j
、h
、l
移動光標的位置;固然咱們也可使用快捷鍵對文件內容進行復制、粘貼、刪除、替換等等一系列操做。 經常使用的幾個命令:lua
### 命令行模式下,比較經常使用的幾個命令:
i 切換到輸入模式,以輸入字符 -- 最最經常使用
x 刪除當前光標所在處的字符
X 刪除當前光標前一個字符
: 切換到底線命令模式,以在最底一行輸入命令
dd 移動光標到某一個位置,刪除一整行數據命令
o 在當前行的下面另起一行,並變爲輸入模式
shift+g 跳轉到文件末尾
gg 跳轉到文件首行g
複製代碼
下圖所示是vim處於命令行模式的狀態示意圖。spa
在vim 輸入模式下,能夠對有寫入權限
的文件進行寫操做;跟咱們日常在編輯器中開發基本同樣了。那麼咱們一般在命令模式下直接經過命令進入輸入模式:i
、I
、a
、A
、o
、O
等插入命令就能夠進入;當咱們編輯完文件以後按esc鍵
就能夠退出出入模式返回命令模式:
快捷鍵 | 功能描述 |
---|---|
i | 在光標的左側 輸入文本,光標右側文本向右移動 |
I | 在光標所在行的行首 輸入文本,至關於在行首執行了i命令 |
a | 在光標的右側 輸入文本 |
A | 在光標所在行的尾部 進行輸入文本,至關於在光標行尾執行a命令 |
o | 在光標所在行的下一行 增添新的一行,光標停留在新行的行首 |
O | 在光標所在行的上一行 增添新的一行,光標停留在新行的行首 |
下圖所示爲vim處於輸入模式模式下的示意圖:
vim的底線命令模式:在命令模式下按:
(注意是英文冒號),此時vim的窗口左下方會出現一個:
符號,這時就已經進入了底線命令模式了。
注意:指令執行以後會把自動返回到命令行模式的。
做用:底線命令模式能夠對文件中指定的內容進行保存、替換、查詢、刪除等等操做。
最最最經常使用指令快捷鍵以下圖:
快捷鍵 | 功能描述 |
---|---|
:q | 退出vi編輯器 |
:q! | 不保存文件,直接退出vi編輯器 |
:w | 只保存文件,但不退出vi編輯器 |
:wq | 保存文件且退出vim編輯器 |
:start,endd | 從第start行開始到end行進行刪除操做 最後一個d標識刪除 |
:%d | 清空文件內容(跳到行首dG執行也可刪除) |
:! command | 暫時離開vim編輯器去到指令模式下執行 command 命令顯示結果 |
:%d | 清空文件內容(跳到行首dG執行也可刪除) |
下圖所示爲vim進入底線命令模式後的操做狀態圖:
PS:你們能夠關注一下gif圖形,每個操做動畫都會帶有命令;注意觀看
複製代碼
① 正常打開一個文件默認光標在第一行
➜ ~ vim filename -- filename指文件名
複製代碼
② 正常打開一個文件默認光標在文件尾部
➜ ~ vim + package.json -- package.json打開的文件名或者文件路徑
複製代碼
③ 正常打開一個文件默認讓光標定位在第幾行
➜ ~ vim +num package.json -- num 標識光標定位到第幾行
複製代碼
① 字符移動命令
① h 將光標向左移動一格
② j 將光標向下移動一格
③ k 將光標向上移動一格
④ l 將光標向右移動一格
### 注意注意
這些移動的指令咱們也能夠帶上一次移動多少,例如:2j -- 表示向下移動2格
複製代碼
② 單詞移動命令
① w 將光標向右移動到下一個單詞的詞首
② b 將光標向前移動到前一個單詞的詞首
③ e 將光標跳轉到當前或下一個單詞的詞尾
複製代碼
③ 首尾行移動命令
① $ 將光標移動到當前行的尾部
② 0 將光標移動到當前行的行首 -- 0 表示數字零 不是字母O
③ gg 將光標跳轉到文件第一位置
④ G 將光標跳轉到文件的末尾
⑤ num+G 將光標跳轉到文件的第幾行 -- num表示文件的第幾行
⑥ :num 底線命令模式下,直接給出行號,一樣能夠實現跳轉 -- num 跳轉行數
複製代碼
④ 退出命令
① :wq 保存文件且退出vi編輯器
② :w 保存文件,可是不退出vi編輯器
③ :q 退出vi編輯器
④ :q! 不保存文件,直接退出vi編輯器
⑤ ZZ 保存文件且退出vi編輯器
複製代碼
⑤ 翻頁鍵命令
① ctrl+d 將光標向下翻半屏,一般每次翻屏12行
② ctrl+u 將光標向上翻半屏,一般每次翻屏12行
③ ctrl+f 將光標向下翻滿屏,一般每次翻屏24行
④ ctrl+b 將光標向上翻滿屏,一般每次翻屏24行
複製代碼
⑥ 剪切和粘貼鍵命令
① d 刪除指定位置的文本且臨時存儲到緩存區;可以使用p訪問緩存區;經常這樣使用:d、:num,numd、dd(刪除整行)、..
② y 將指定文本複製到臨時緩存區;可以使用put操做符訪問;經常這樣使用:y、yy(複製整行)
③ p 將指定緩存區內容放在光標位置之下;整行文本放在行下面,如果非整行文本則放在光標後面
④ P 將指定緩衝區的內容放到當前光標的位置之上;整行文本放在行下面,如果非整行文本則放在光標後面
複製代碼
⑦ 文本修改鍵命令
① x 刪除光標位置指定的字符
② dd 刪除光標所在的行
③ u 撤銷最近的修改,針對全部修改
④ U 撤銷對當前行上作的全部修改
⑤ r 替換光標位置上的一個字符,但不會進入insert模式;例如2r:把後面2個字符替換掉
⑥ R 替換從光標位置開始的字符,同時改變vi到文本輸入模式
⑦ . 重複上一次的修改 -- 注意該命令是:英文符號點
複製代碼
⑧ 搜索替換命令(需在底線命令模式)
① :/string 從文件首部開始查找到尾部;按n鍵能夠跳到下一個,N上一個,另外按/鍵後,按上下鍵能夠找到之前查找的記錄,一樣的也有記錄
② :?string 同上,從當前光標向文件首部查找
③ :%s/word1/word2/g 從文件首到尾替換每一行的 word1爲 word2
④ :num,num1s/word1/word2/g 從第num行到num1行替換word1爲word2
⑤ :num,$s/word1/word2/g 從第num行查詢word1字符串,並替換爲word2
⑥ :s/str1/str2/g 從光標當前行搜索word1字符串並替換爲word2
### 下面簡單的操做下
複製代碼
⑨ 將當前文件中的部份內容另存爲另一個文件
### 注意是在底線命令模式下
:num,$ w test.lua -- 將當前文件從第 num 行到最後一行內容,保存到test.lua中
複製代碼
⑩ 將別的文件內容填充在當前文件中
### 注意是在底線命令模式下
:r /usr/local/var/weixin/test.log 讀取指定文件中的內容,插入到當前行的最後面
複製代碼
⑩ 刪除文本單詞命令
① dw 刪除當前光標後面的一個單詞
② dnw 刪除光標後面指定的n個單詞 -- n表示要刪除的單詞數
③ d$ 刪除當前光標到行尾的所有單詞
④ d^ 刪除當前光標到行首所有單詞
⑤ dnj 從當前光標處向下刪除n行 -- n表示刪除的行數
⑥ dnk 從當前光標處向上刪除n行 -- n表示刪除的行數
⑦ :g/string/d 刪除當前文件中string字符串的行
⑧ :%s/^\n$//g 刪除空行
### 注意注意:
d指令換成c指令效果是同樣的,只是操做完會變成insert模式
複製代碼
⑩ 文本內容移動命令
① >> 向右移動本行一段距離
② << 向左移動本行一段距離
③ num<< 將下面num行(包括本行),向左移動一段距離
④ :num,num1>> 將num行到num1行向右移動一段距離
複製代碼
⑪ vim中批量添加註釋命令
① 方法一:塊選擇模式(經常使用模式)
批量註釋:
1、ctrl + v 進入塊選擇模式,而後移動光標選中你要註釋的行,
2、再按大寫的 I 進入行首插入模式輸入註釋符號;例如:#號或者//(雙斜線)
3、輸入完畢以後,按兩下 ESC,Vim會自動將你選中的全部行首都加上註釋,可能須要等上幾秒鐘
批量取消註釋:
1、ctrl + v 進入塊選擇模式,選中你要刪除的行首的註釋符號
2、按 d 便可刪除註釋
② 方法二:替換命令(底線命令模式)
批量註釋:
:start,edns/^/註釋符/g -- start:起始行號;end:結束行號:註釋符:#或者//
取消註釋:
:start,edns/^註釋符//g -- start:起始行號;end:結束行號:註釋符:#或者//
複製代碼
⑫ 塊選擇命令
① ctrl + v 進入塊選擇模式,光標移動你要選中的單詞
② 根據 h j k l來選中你須要的模塊
③ 就能夠對選中的數據進行各類操做了
複製代碼
⑬ 顯示和取消行號
① :set nu 顯示行號 也能夠輸入 set number
② :set nonu 取消行號
複製代碼
⑭ 設置文件內容自動縮進
① :set ai 開啓自動縮進
② :set noai 關閉自動縮進
複製代碼
查找到的文本高亮顯示
① :set hlsearch 開啓文本高亮
② :set nohlsearch 關閉文本高亮
複製代碼
⑮ 多個文件一塊兒編輯
➜~ vim filename1 filename2 filename3 ... -- 打開多個文件,默認打開第一個
① :prev 切換到上一個文件
② :N 切換到上一個文件
③ :next 切換到下一個文件
④ :n 切換到下一個文件
⑤ :last 切換到最後一個文件
⑥ :first 切換到第一個文件
⑦ :qa :所有退出
複製代碼
⑯ 多窗口功能
## 注意使用
① :sp filename 水平打開一個新窗口,顯示新文件,若只輸入:sp,則兩窗口顯示同一個文件
② ctrl+w + s 水平拆分窗口
③ ctrl+w + v 垂直拆分窗口
④ ctrl + w + j 光標移動到下方窗口
⑤ ctrl + w + k 光標移動到上方窗口
⑥ ctrl + w + q 離開當前窗口
### 演示以下圖:
複製代碼
以上就是我最近幾年來常用的一些vim命令,記住是經常使用的命令哦!記得要多多的使用哦~~~