vim 是對 vi 的擴展,文中的很多操作是 vi 通用的
vi 是區分大小寫的命令的,也就是說 g與G 是不同的命令
在不同模式下,快捷鍵是不一樣的 模式分 一般模式 編輯模式 指令模式
一般模式用於文件內部操作,編輯模式用於輸入編寫等,指令模式用於對文本文件進行操作
常用操作
進入一般模式為開始編輯,或者按 esc 后進入
| 按鍵 | 效果 |
|---|---|
| a,i,r,o,A,I,R,O | 進入編輯模式 |
| h,backspace | 左移動 |
| l,space | 右移動 |
| j | 下移動 |
| k | 上移動 |
| 0, | 移動到行首 |
| $ | 移動到行末,1$表示當前行的行尾,2$表示當前行的下一行的行尾 |
| b | 按照單詞向前移動 字首 |
| e | 按照單詞向后移動 字尾 |
| w | 按照單詞向后移至次一個字首 |
| H | 移動到屏幕最上 非空白字 |
| M | 移動到屏幕中央 非空白字 |
| L | 移動到屏幕最下 非空白字 |
| G | 移動到文檔最后一行 |
| gg | 移動到文檔第一行 |
| v | 進入光標模式,配合移動鍵選中多行 |
| Ctrl+f | 向下翻頁 |
| Ctrl+b | 向上翻頁 |
| u | 撤銷上一次操作 |
| `` | 回到上次編輯的位置 |
| dw | 刪除這個單詞后面的內容 |
| dd | 刪除光標當前行 |
| dG | 刪除光標后的全部文字 |
| d$ | 刪除本行光標后面的內容 |
| d0 | 刪除本行光標前面的內容 |
| y | 復制當前行,會復制換行符 |
| yy | 復制當前行的內容 |
| yyp | 復制當前行到下一行,此復制不會放到剪切板中 |
| nyy | 復制當前開始的 n 行 |
| p,P,. | 粘貼 |
| ddp | 當前行和下一行互換位置 |
| J | 合並行 |
| Ctrl+r | 重復上一次動作 |
| Ctrl+z | 暫停並退出 |
| ZZ | 保存離開 |
| xp | 交換字符后面的交換到前面 |
| ~ | 更換當前光標位置的大小寫,並光標移動到本行右一個位置,直到無法移動 |
光標詳細操作
| 按鍵 | 效果 |
|---|---|
| Ctrl+e | 向下滾動 |
| Ctrl+b | 向上翻頁 |
| b | 按照單詞向前移動 字首 |
| B | 按照單詞向前移動 字首 忽略一些標點符號 |
| e | 按照單詞向后移動 字尾 |
| E | 按照單詞向后移動 忽略一些標點符號 |
| w | 按照單詞向后移至次一個字首 |
| W | 按照單詞向后移至次一個字首 忽略一些標點符號 |
| H | 移動到屏幕最上 非空白字 |
| M | 移動到屏幕中央 非空白字 |
| L | 移動到屏幕最下 非空白字 |
| G | 移動到文檔最后一行 |
| gg | 移動到文檔第一行 |
| ( | 光標到句尾 |
| ) | 光標到局首 |
| { | 光標到段落開頭 |
| } | 光標到段落結尾 |
| nG | 光標下移動到 n 行的首位 |
| n$ | 光標移動到 n 行尾部 |
| n+ | 光標下移動 n 行 |
| n- | 光標上移動 n 行 |
查找命令
| 指令 | 效果 |
|---|---|
| * | 向下查找同樣光標的字符 |
| # | 向上查找同樣光標的字符 |
| /code | 查找 code 一樣的內容,向后 |
| ?code | 查找 code 一樣的內容,向前 |
| n | 查找下一處 |
| N | 查找上一處 |
| ma | 在光標處做一個名叫 a 的標記 可用 26 個標記 (a~z) |
| `a | 移動到一個標記 a |
| d`a | 刪除當前位置到標記 a 之間的內容 |
| :marks | 查看所有標記 |
指令模式
| 指令 | 效果 |
|---|---|
| :q | 一般退出 |
| :q! | 退出不保存 |
| :wq | 保存退出 |
| :w filename | 另存為 filename |
| :jumps | 歷史編輯文檔記錄 |
| :set nu | 設置行號顯示 |
| :set nonu | 取消行號顯示 |
| :set | 顯示設置參數 |
| :set autoindent | 自動縮排,回車與第一個非空格符對齊 |
| :syntax on/off | 根據程序語法高亮顯示 |
| :set highlight | 高亮設置查看 |
| :set hlsearch | 查找代碼高亮顯示 |
| :nohlsearch | 暫時關閉高亮顯示 |
| :set nohlsearch | 永久關閉高亮顯示 |
| :set bg=dark | 設置暗色調 |
| :set bg=light | 設置亮色調 |
屏幕翻滾
| 按鍵 | 效果 |
|---|---|
| Ctrl+f | 向文件尾翻一屏幕 |
| Ctrl+b | 向文件首翻一屏幕 |
| Ctrl+d | 向文件尾翻半屏幕 |
| Ctrl+u | 向文件首翻半屏幕 |
插入命令
| 按鍵 | 效果 |
|---|---|
| i | 在光標前 |
| I | 在當前行首 |
| a | 在光標后 |
| A | 在當前行尾部 |
| o | 在當前行下新開一行 |
| O | 在當前行上新開一行 |
| r | 替換當前字符 |
| R | 替換當前行及后面的字符,直到按 esc 為止 |
| s | 從當前行開始,以輸入的文本替代指定數目的字符 |
| S | 刪除指定數目的行,並以輸入的文本替代 |
| ncw,nCW | 修改指定數目 n 的字符 |
| nCC | 修改指定數目 n 的行 |
刪除命令
| 按鍵 | 效果 |
|---|---|
| ndw,nDW | 刪除光標開始及其后 n-1 個字符 |
| dw | 刪除這個單詞后面的內容 |
| dd | 刪除光標當前行 |
| dG | 刪除光標后的全部文字 |
| d$ | 刪除本行光標后面的內容 |
| d0 | 刪除本行光標前面的內容 |
| ndd | 刪除當前行,以及其后的 n-1 行 |
| x | 刪除一個字符,光標后 |
| X | 刪除一個字符,光標前 |
| Ctrl+u | 刪除輸入模式下的輸入的文本 |
多窗口模式
| 指令 | 效果 |
|---|---|
| :split | 創建新窗口 |
| Ctrl+w | 切換窗口 |
| Ctrl-w = | 所有窗口一樣高 |
| Ctrl-w + 方向鍵 | 多窗口視圖切換 |
多文件編輯
| 指令 | 效果 |
|---|---|
| :args | 列出當前編輯的文件名 |
| :next | 打開多文件,使用 n(Next) p(revious) |
| :file | 列出當前打開的所有文件 |
vim 自定義技巧
復制粘貼取消縮進
:set paste
進入 paste 模式以后,可以在插入模式下粘貼內容,不會有任何變形
這個參數做了這么多事:
textwidth設置為0
wrapmargin設置為0
set noai
set nosi
softtabstop設置為0
revins重置
ruler重置
showmatch重置
formatoptions使用空值
下面的選項值不變,但卻被禁用
lisp
indentexpr
cindent
綁定快捷鍵來激活 / 取消 paste 模式
:set pastetoggle=<F11>
出現粘貼換行符錯位,設置一下 .vimrc
" this can change way of paste words
:set paste
" default tabstop=8
:set tabstop=4
" use keyboard F11 to change paste mode
:set pastetoggle=<F11>
vim 縮進
Normal Mode 下,命令
>>將對當前行增加縮進,而命令<<則將對當前行減少縮進
在命令前使用數字,來指定命令作用的范圍
5<<
在 Insert/Replace Mode 下
Ctrl-Shift-t可以增加當前行的縮進Ctrl-Shift-d則可以減少當前行的縮進- 使用
0-Ctrl-Shift-d命令,將移除所有縮進
需要注意的是,當我們輸入命令中的 “0” 時,Vim 會認為我們要在文本中插入一個 0,並在屏幕上顯示輸入的“0”;然后當我們執行命令 0-Ctrl-Shift-d 時,Vim 就會意識到我們要做的是減少縮進,這時 0 會就會從屏幕上消失
vim tab 縮進
tab 縮進寬度默認為 8 個空格
我們可以使用以下命令,來修改縮進寬度
:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab
-
tabstop: 表示一個 tab 顯示出來是多少個空格的長度默認 8
-
softtabstop: 表示在編輯模式的時候按退格鍵的時候退回縮進的長度當使用 expandtab 時特別有用。
-
shiftwidth: 表示每一級縮進的長度一般設置成跟 softtabstop 一樣。 當設置成 expandtab 時縮進用空格來表示noexpandtab 則是用制表符表示一個縮進
-
expandtab 選項,用來控制是否將 Tab 轉換為空格, 但是這個選項並不會改變已經存在的文本,如果需要應用此設置將所有 Tab 轉換為空格,需要執行
:retab!
vim 自動縮進
- cindent
:set cindent
vim 可以很好的識別出 C 和 Java 等結構化程序設計語言,並且能用 C 語言的縮進格式來處理程序的縮進結構
- smartindent
:set smartindent
在這種縮進模式中,每一行都和前一行有相同的縮進量,同時這種縮進形式能正確的識別出花括號,當遇到右花括號(}),則取消縮進形式。此外還增加了識別 C 語言關鍵字的功能。如果一行是以 #開頭的,那么這種格式將會被特殊對待而不采用縮進格式。
- autoindent
:set autoindent
在這種縮進形式中,新增加的行和前一行使用相同的縮進形式
顯示隱藏符號
- 默認不顯示
:set nolist - 顯示
:set invlist
" normal is :set nolist | show hide is :set invlist
:set nolist
使用 vim 寄存器
使用 vim 寄存器 “+p 粘貼
根本不用考慮是否自動縮進,是否 paste 模式,直接原文傳遞
如果想保存原寄存器中內容而同時增加新的內容,就要在 yy 前增加標簽
標簽以雙引號開始,跟着的是標簽名稱,可以是數字 0-9,也可以是 26 個字母
顯示所有寄存器內容
:reg
注意兩個特殊的寄存器:
*和+
這兩個寄存器是和系統相通的,前者關聯系統選擇緩沖區,后者關聯系統剪切板
通過它們可以和其他程序進行數據交換
若寄存器列表里無
*或+寄存器,則可能是由於沒有安裝 vim 的圖形界面所致
sudo apt-get install vim-gnome
設置 vim 永遠顯示行號
修改 vim 的配置文件加入 set nu
vi ~/.vimrc
然后輸入
set nu
當然也可以輸入其他配置類似
set nonu
syntax on
vimrc 常用配置
| 設置行號 | set nu |
|---|---|
| 設置自動縮進 | set autoindent |
| 設置tab占n個字符 | set tabstop=n |
| 設置以空格代替tab(因為有部分場合不允許使用tab) | set expandtab |
| 設置縮進字符數為n | set shiftwidth=n |
| 設置自動語法高亮 | syntax on |
原文鏈接:https://rumenz.com/rumenbiji/linux-vi-vim.html
微信公眾號:入門小站
