[TOC]
使用前需要知道的
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) | N(ext) 切換 |
: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 常用配置
" open syntax
syntax on
" set not show line number can change by :set nu
:set nonu
" set show line number when in edit
:set ruler
" set tab button stop
" default tabstop=8
:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab
" use keyboard F11 to change paste mode
:set pastetoggle=<F11>
" normal is :set nolist | show hide is :set invlist
:set nolist
" fix mac vim keyboard delete can not delete error, so as set backspace=indent,eol,start
set backspace=2
" ------------
" install plug-in manager see https://github.com/VundleVim/Vundle.vim
查看vim設置的樣例文件
- linux 查看
find /usr/share/ -name "*example.vim"
- mac 查看方法
locate example.vim
如果是第一次運行會報告錯誤,需要建立索引,根據提示操作即可,建議運行一次 updatedb
找到標識為 example.vim
的文件就是樣例