vim 常用快捷鍵及使用技巧

[TOC]

使用前需要知道的

vim 是對vi的擴展,文中的很多操作是vi通用的

vi是區分大小寫的命令的,也就是說 gG 是不同的命令

在不同模式下,快捷鍵是不一樣的 模式分 一般模式 編輯模式 指令模式

一般模式用于文件內部操作,編輯模式用于輸入編寫等,指令模式用于對文本文件進行操作

常用操作

進入一般模式為開始編輯,或者按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 的文件就是樣例

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容