程序員必備vim編輯器命令,你想要的我都整理好了(建議收藏)

前言

上個月組內來了一個新的小夥伴,趕巧那個時候我休假了!當我休完假來的時候,這個新小夥伴成了我同桌,而後就是一塊兒作項目咯。就在昨天咱們在配置環境,修改各類配置文件的時候;小夥伴看到我各類vim的快捷指令使用,有點驚訝了:「臥槽,你怎麼作到記得這麼清楚的?這誰能記得住?教教我唄?」。json

其實很簡單:多寫多用多練,例如:以前的一個同事,寫代碼只用vim編輯模式,我就是從這來學來的。vim

關於liunx下vim指令,我剛畢業的時候畫過一張思惟導圖(這麼久了我覺得沒有刪除,雲盤居然被清理了),不過能夠按照下面的知識點,一個個看一遍且本地操做一遍。🤣 😏 😜緩存

01 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

### 還有不少的命令
複製代碼

02 vim的基本概念概述

咱們都知道vim是有三種狀態,分別是命令行模式(command mode)、輸入模式(Insert mode)和底線命令模式(last line mode),這 3 種工做模式可隨意切換,以下圖所示:ui

vim工做模式

02.1 vim命令行模式

咱們使用vim編輯文件的時候,默認進入文件是命令行模式;在此模式下,可使用鍵盤上的方向鍵:鍵 或者 kjhl移動光標的位置;固然咱們也可使用快捷鍵對文件內容進行復制、粘貼、刪除、替換等等一系列操做。 經常使用的幾個命令:lua

### 命令行模式下,比較經常使用的幾個命令:

i 切換到輸入模式,以輸入字符  -- 最最經常使用

x 刪除當前光標所在處的字符

X 刪除當前光標前一個字符

: 切換到底線命令模式,以在最底一行輸入命令

dd 移動光標到某一個位置,刪除一整行數據命令

o 在當前行的下面另起一行,並變爲輸入模式

shift+g 跳轉到文件末尾

gg 跳轉到文件首行g
複製代碼

下圖所示是vim處於命令行模式的狀態示意圖。spa

vim命令行模式

02.2 vim輸入模式

在vim 輸入模式下,能夠對有寫入權限的文件進行寫操做;跟咱們日常在編輯器中開發基本同樣了。那麼咱們一般在命令模式下直接經過命令進入輸入模式:iIaAoO等插入命令就能夠進入;當咱們編輯完文件以後按esc鍵就能夠退出出入模式返回命令模式:

快捷鍵 功能描述
i 在光標的左側輸入文本,光標右側文本向右移動
I 在光標所在行的行首輸入文本,至關於在行首執行了i命令
a 在光標的右側輸入文本
A 在光標所在行的尾部進行輸入文本,至關於在光標行尾執行a命令
o 在光標所在行的下一行增添新的一行,光標停留在新行的行首
O 在光標所在行的上一行增添新的一行,光標停留在新行的行首

下圖所示爲vim處於輸入模式模式下的示意圖:

vim輸入模式

02.3 vim底線命令模式

vim的底線命令模式:在命令模式下按:(注意是英文冒號),此時vim的窗口左下方會出現一個:符號,這時就已經進入了底線命令模式了。

注意:指令執行以後會把自動返回到命令行模式的。

做用:底線命令模式能夠對文件中指定的內容進行保存、替換、查詢、刪除等等操做。

最最最經常使用指令快捷鍵以下圖:

快捷鍵 功能描述
:q 退出vi編輯器
:q! 不保存文件,直接退出vi編輯器
:w 只保存文件,但不退出vi編輯器
:wq 保存文件且退出vim編輯器
:start,endd 從第start行開始到end行進行刪除操做 最後一個d標識刪除
:%d 清空文件內容(跳到行首dG執行也可刪除)
:! command 暫時離開vim編輯器去到指令模式下執行 command 命令顯示結果
:%d 清空文件內容(跳到行首dG執行也可刪除)

下圖所示爲vim進入底線命令模式後的操做狀態圖:

vim底線命令模式

vim的經常使用命令+快捷鍵

PS:你們能夠關注一下gif圖形,每個操做動畫都會帶有命令;注意觀看
複製代碼

03.1 vim打開文件命令

① 正常打開一個文件默認光標在第一行

➜  ~ vim filename  -- filename指文件名
複製代碼

② 正常打開一個文件默認光標在文件尾部

➜  ~ vim + package.json  -- package.json打開的文件名或者文件路徑
複製代碼

③ 正常打開一個文件默認讓光標定位在第幾行

➜  ~ vim +num package.json -- num 標識光標定位到第幾行
複製代碼

03.2 vim命令模式下,光標移動

① 字符移動命令

① h 將光標向左移動一格

② j 將光標向下移動一格

③ k 將光標向上移動一格

④ l 將光標向右移動一格

### 注意注意

這些移動的指令咱們也能夠帶上一次移動多少,例如:2j -- 表示向下移動2複製代碼

2021-05-29 13.03.14.gif

② 單詞移動命令

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:結束行號:註釋符:#或者//
複製代碼

vim中批量添加註釋命令

⑫ 塊選擇命令

① 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命令,記住是經常使用的命令哦!記得要多多的使用哦~~~

相關文章
相關標籤/搜索