vim是vi改進版
windows 體驗版 gvim
基本指令
$ vim # normal模式
:q(quit) # 退出
# 進入編輯insert模式(6種)
i(insert) # 光标前插入
a(append) # 光标後插入
o(open a line below) # 行下插入
I insert before line # 行首
A append after line # 行尾
O open a line above # 行上插入
ESC 回到normal模式
:wq # 儲存退出write quit
vim4種模式
1、Normal普通模式(浏覽)
Esc插入模式回到普通模式
普通模式下進行各種指令操作和移動
大部分情況下,使用的是浏覽
2、Insert插入模式(編輯)
a/i/o 光标進入插入模式
A/I/O 行進入插入模式
3、Command指令模式(操作)
Normal模式下:進入指令模式
:q退出 :w儲存
:vs(vertical split)垂直左右分屏 :sp(split) 水準上下分屏
:set nu 設定行号
:% s/java/python/g 全部替換java->python
:syntax on 文法高亮
4、Visual可視模式(選擇)
Nomal模式下進入Visual模式
v選擇字元
V選擇行
ctrl+v塊狀選擇
插入模式小技巧
ctrl + h 删除上一個字元
ctrl + w 删除上一個單詞
ctrl + u 删除目前行
終端:
ctrl + a 移動到行首
ctrl + e 移動到行尾
切換到Normal模式:
Esc、ctrl + c、 ctrl + [
gi 回到剛才插入位置并進入插入狀态
快速移動
Normal模式下
1、字元移動
h左 j下 k上 l右
^
k
< h l >
j
v
2、單詞移動
w/W 移動到下一個word/WORD開頭
e/E 下一個word/WORD尾
b/B 回到上一個word/WORD開頭,backword
word 非空白符分割的單詞
WORD 以空白符分割的單詞
3、行間搜尋移動
f{char} 移動到char字元上
t{char} 移動到char前一個字元上 until
第一次沒搜到,可以繼續搜該行
分号; 下一個
逗号, 上一個
F反向搜尋
4、水準移動
0 移動到行首第一個字元
^ 移動到第一個非空白字元
$ 移動到行尾
g_ 移動到行尾非空白字元
5、垂直移動
括号() 句子間移動
檢視幫助 :help (
{} 段落之間移動
6、螢幕移動
H head 螢幕開頭
M middle 中間
L lower 結尾
zz 把螢幕置為中間,目前行放中間
7、頁面移動
gg 檔案開頭
G 檔案結尾
ctrl + o 快速傳回
ctrl + u upword 上翻半頁
ctrl + f forword 下翻半頁
增删改查
1、增加
Normal模式 a/i/o A/I/O
2、删除
Normal模式
x 删除一個字元
4x 删除4個字元
d(delete)
daw 删除單詞和周圍空格(delete around word)
diw 删除單詞(dw)
dd 删除行
dt{char} 删除直到
d$ 删除到結尾
d0 删除到開頭
2dd 删除兩行
u undo 撤銷操作
ctrl + r 恢複撤銷
3、修改
r replace 替換一個字元
eg: 光标下g ra g->a
c change
cw 删除單詞進入插入模式 change word
ct{char} 删除到字元,進入插入模式
s substitute 删除并進入插入模式 eg: 4s 删除4個字元進入插入模式
R 不斷替換多個字元
S 删除整行進行插入
C 删除整行進行插入
4、查詢
/ 前向搜尋
? 反向搜尋
n/N 下一個或者上一個
*/# 目前單詞的前向和後向比對
搜尋結果高亮 :set hls (high light search)
:set incsearch
搜尋替換
substitute 支援正則
:[range] s[ubstitute]/{pattern}/{string}/flags
range 範圍
eg:
10,20 表示10-20行
% 表示全部
pattern 替換模式
string 替換後文本
flags 替換标志位
g global 全局替換
c confirm 确認
n number 查詢比對次數而不替換
:% s/self/this/g # 替換 self->this
:1,6 s/self//n # 查詢 計算有1-6行有多少個self
:% s/\<name\>/Name/g # 精确比對單詞
多檔案操作
Buffer 打開一個檔案的緩沖區
Window 可視化分割區域
Tab 組織視窗為一個工作區
1、Buffer
:ls 列舉緩沖區
:b n 跳轉到第n個緩沖區
:bpre :bnext :bfirst :blast
:b buffer_name tab補全
:e filename 打開檔案
2、Window
一個緩沖區可以分割為多個視窗
每個視窗也可打開不同緩沖區
視窗可以無限分割
(1)視窗分割
+ s 水準分割
+ v 垂直分割
:sp [filename] 水準分割(打開檔案)
:vs [filename] 垂直分割(打開檔案)
(2)視窗切換
+ w 循環切換
+ h 切換到左邊
+ j 切換到下邊
+ k 切換到上邊
+ l 切換到右邊
(3)視窗移動
+ H 移動到左邊
+ J 移動到下邊
+ K 移動到上邊
+ L 移動到右邊
(4)重排視窗
:h window-size
+ = 所有視窗等寬等高
+ _ 最大化活動視窗高度
+ | 最大化活動視窗寬度
n + + _ 把活動視窗的高度設為n 行
n + + | 把活動視窗的寬度設為n 行
3、Tab标簽頁
一系列視窗的容器:h tabpage
:tabnew {filename} 新标簽中打開
:tabe[dit] {filename} 新标簽中打開
+ T 目前視窗移動到一個新标簽頁
:tabc[lose] 關閉目前标簽頁及其中的所有視窗
:tabo[nly] 隻保留目前标簽頁,關閉其他标簽頁
:tabn[ext] {N} {N}gt 切換到編号N 的标簽頁
:tabn[ext] gt 切換到下一個标簽頁
:tabp[revious] gT 切換到上一個标簽頁
插件:ctrlp nerdtree
文本對象text object
指令格式:
[number]<command>[text object]
number 次數
command 指令 d(delete), c(change), y(yank), v(visual)
text object 文本對象 w(單詞word), s(句子sentence),p(段落paragraph)
iw 插入單詞
viw 選擇模式插入單詞
vaw around word 選中目前單詞和單詞之後的空格
vis/vas/vip/vap
vi(/)//{/}/"/"/’/’
va(/)//{/}/"/"/’/’
ciw 删除單詞并插入
ci{ 删除{内容
插件 vim-go
複制粘貼
Normal模式:
y(yank) p (put)
dd 删除一行 p粘貼
Visual模式:選中之後 p粘貼
文本對象:yiw 複制一個單詞 yy複制一行
vimrc
:set autoindent 設定自動縮進
粘貼代碼格式錯亂解決:
:set paste 設定
:set nopaste 取消
Insert模式
ctrl + v/ command + v
Vim寄存器
無名寄存器
dw->p 剪切粘貼單詞
x->p 剪切粘貼字元
指定寄存器 ”{register}
"ayiw 複制單詞到寄存器a中
"bdd 删除目前行到寄存器b中
:reg a 檢視a寄存器内容
"ap 粘貼寄存器a中的内容
""無名寄存器,預設模式
"0 寄存器0
寄存器a-z
"+系統剪切闆
"% 目前檔案名
:echo has("clipboard") 1則支援
:set clipboard=unname 直接使用系統剪切闆
".上一次插入的文本
ctrl + r +
:e! 重新加載不儲存目前檔案
Vim宏macro批量操作
錄制操作,回放操作
q錄制 q結束
q{register} 儲存到寄存器
@{register} 回放操作
v 模式下選擇
:normal @a 回放宏操作
每行前後加"
V 全選行 G 全選文本
:normal I" A"
Vim代碼補全
普通關鍵字
目前緩沖區關鍵字
包含檔案名關鍵字
标簽檔案關鍵字
字段查找
整行補全
檔案名補全
全能Omni補全
常用:
補全單詞
補全代碼,需開啟檔案類型檢查,安裝插件
syntax on
:set nu
:set indent
:r! echo % 檔案名
:r! echo %:p 檔案路徑
更換配色
:colorscheme 顯示目前主題配色 預設default
:colorscheme 顯示所有配色
:colorscheme 配色名 修改配色
$ vim duck.go duck.py -O # 兩個視窗打開
持久化配置 vim ~/.vimrc
配色方案 hybrid Monokai
下載下傳配色方案拷貝到檔案夾 mkdir ~/.vim/colors
vim插件:
https://github.com/flazz/vim-colorschemesvim配置
持久化配置
Linux/Unix vim ~/.vimrc
windows vim $MYVIMRC 環境變量
常用設定
:set nu # 設定行号
colorscheme hybrid # 設定主題
vim映射 noremap w :w 儲存檔案
自定義vimscript函數 和插件配置
" 常用設定,這是注釋
" 設定行号
set number
" 設定主題
colorscheme hybrid
" 按F2進入粘貼模式
set pasttoggle=<F2>
" 高亮搜尋
set hlsearch
" 設定折疊方式
set foldmethod=indent
" 一些友善的映射
let mapleader=','
let g:mapleader=','
" 使用 jj 進入 normal 模式 `^上一次插入點
inoremap jj <Esc>`^
" 使用 leader+w 直接儲存
inoremap <leader>w <Esc>:w<cr>
noremap <leader>W :w<cr>
" 切換 buffer
nnoremap <silent> [b :bprevious<CR>
nnoremap <silent> [n :bnext<CR>
" 切換視窗
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l
" sudo to write
cnoremap W!! w !sudo tee % >/dev/null
" json格式化
com! FormatJSON %!python3 -m json.tool
映射
設定leader
let mapleader = “,”
重新開機vim或source生效
:source ~/.vimrc
插件腳本
腳本語言 vimscrip
檢視配置選項
:h option-list
自定義函數
func SetTitle()
if &filetype == 'python'
call setline(1, "\#!/usr/bin/env python")
call setline(2, "\# -*- coding:utf-8 -*-")
normal G
normal o
normal o
call setline(5, "if __name__ == '__main__':")
call setline(6, " pass")
endfunc
github: vim-go-tutoria
開源檔案:dotfiles
vim映射
:map - x # 将-映射為x
:map viw 空格映射為選中整個單詞
:map dd 可以使用ctrl+d執行dd操作
:unmap - 删除映射
模式
nmap normal
vmap visual
imap insert
v 選中 U/u 轉大小寫
:imap ddi # insert模式下删除一行
nnoremap n no re map normal模式下,非遞歸映射(任何時候都應該使用)
《笨辦法學vimscript》
vim8 Neovim