Vim使用簡記:
普通模式進入編輯模式:
- i insert
a append
o open a line blow
I insert in line befor
A append in line end
O open a line above
ctrl [ 可以跟esc一樣退出編輯模式
gi 快速回到退出時的位置並進入編輯模式
編輯模式下:
- ctrl w 刪除上一個單詞
ctrl h 刪除上一個字符
ctrl u 刪除一行
通過使用上面的命令可以解決複製代碼時的縮進問題。
普通模式下:
-
v 可視化模式 批量選擇選擇
-
V 按行批量選擇
-
vaw 和viw 選中一個單詞
-
ctrl v 按塊批量選擇
-
y(ank) 複製
-
yiw 複製一個單詞
-
yy 複製一行
-
p(ut) 粘貼
-
u(ndo) 撤銷
-
ctrl r 使用上一步的修改
-
d(elete) 刪除(剪切)
-
d p 命令配合進行剪切
方向移動:
單詞間:
- w/W可以在跳到下一個單詞的開頭
e/E 可以跳到一個word的尾部
b/B 回到上一個單詞的首部
行間:
- f{char} 快速移動到char字符上,t{char}移動char的前一個字符
; 該行的下一個 ,該行上一個
F 向上搜索
水平移動:
- 0 移動到行首, ^ 移動到行首第一個非空白字符
$ 移動到行尾, g_移動到行尾非空白字符
記住0和$即可
垂直移動:
- 使用()在句子間移動,{ } 在段落間移動
頁面移動:
- gg/G移動到文件開頭和結尾 ctrl+o快速返回
H/M/L跳到屏幕開頭(head),中間(Middle),結尾(Lower)
Ctrl+u Ctrl+f 上下翻頁(upword/forward)
增刪改查:
-
增:進入編輯模式
-
刪除:x刪除一個字符,dd刪除一行,dw=daw刪除一個單詞,diw刪除一個單詞,4x刪除四個字符
-
修改:r(replace),c(change),s(substitute),r可以替換一個字符,s替換並進入插入模式,c配合文本對象可以快速修改,caw,ct{char}
-
查詢:使用/或者?進行前向或者反向搜索;使用n/N跳轉到下一個或者上一個匹配;使用*或者#進行當前單詞的前向和後向匹配
-
搜索替換substitute:
:[range]s[ubstitute]/{pattern}/{string}/[flags]
-
range 範圍 10,20表示10-20行,%表示全部
-
常用Flags標誌(可以進行組合使用):
- g(global)表示全局範圍執行
- c(confirm)表示確認,可以確認或者拒絕修改
- n(number)報告匹配到的次數而不替換,可以用來查詢匹配次數
寄存器:
- 通過"{register}前綴可以指定寄存器,不指定默認使用無名寄存器
“” 表示無名寄存器,缺省下就表示無名寄存器
"0 複製專用寄存器
“+ 系統剪切板,”% 當前文件名, ". 上次插入的文本
cmd:命令模式
- set clipboard=unnamed 將複製寄存器設爲系統剪切板
- vs 豎分屏
- sp 橫分屏
- % s/word1/word2/g 使用word2替換文件中的所有word1
- e! 禁止剛纔所有的更改
多文件操作(buffer window tab):
- 操作:
:e file_name 可以將多個文件添加到緩衝區(edit)
buffer之間切換:- :ls列舉當前緩衝區,然後:b n跳轉到第n個緩衝區
:bpre :bnext :bfirst :blast
:b buffer_name
- :ls列舉當前緩衝區,然後:b n跳轉到第n個緩衝區
window 窗口
<ctrl+w>s 水平分割,<ctrl+w>v垂直分割,或者:sp和:vs
切換窗口:
Tab(標籤頁)操作
:tabnew {filename} 在新標籤中打開一個文件
文本對象操作方式(例如之前的dw):
[number] {text object]
number 表示次數,command 是命令,d(elete),c(hange),y(ank),v批量選擇
text object 要操作的文本對象,單詞w,句子s,段落p
vi“ 選擇”之間的對象
ci“ change inner of ”
ca[ change around of []
宏完成批量操作:
- q 進行宏的錄製,再按一下q結束錄製,@a,執行a寄存器中的宏。
- 也可以在v 可視化模式下,選擇所有行,然後進入:cmd模式執行,normal命令。也可以實現宏的效果。
補全:
- ctrl+n 和 ctrl+p 補全單詞
- ctrl+x ctrl+f 補全文件名
- ctrl+x ctrl+o補全代碼,要開啓文件類型檢測,安裝插件
vim配色更換:
vim配置文件:vimrc
" 常用設置
" 設置行號
set number
colorscheme hybrid
" 按F2進入粘貼模式
set pastetoggle=<F2>
" 高亮搜索
set hlsearch
" 設置摺疊方式
set foldmethod=indent
" 使用映射
遞歸映射與非遞歸映射
個人vimrc臨時配置:
set shiftwidth=4
set softtabstop=4
syntax on
set nu
set autoindent
let mapleader=','
inoremap <leader>w <Esc>:w<cr>
inoremap jj <Esc>
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l
" Specify a directory for plugins
" - For Neovim: stdpath('data') . '/plugged'
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')
Plug 'mhinz/vim-startify'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'Yggdroot/indentLine'
Plug 'w0ng/vim-hybrid'
Plug 'valloric/youcompleteme'
Plug 'preservim/nerdtree'
Plug 'kien/ctrlp.vim'
Plug 'easymotion/vim-easymotion'
" Initialize plugin system
call plug#end()
nnoremap <leader>v :NERDTreeFind<cr>
nnoremap <leader>g :NERDTreeToggle<cr>
let NERDTreeShowHidden=1
let NERDTreeIgnore = ['\.pyc$', '\.swp', '\.swo', '\.vscode', '__pycache__']
let g:ctrlp_map = '<c-p>'
nmap ss <Plug>(easymotion-s2)
" 尋找全局配置文件
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py'
let g:ycm_add_preview_to_completeopt = 0
let g:ycm_show_diagnostics_ui = 0
let g:ycm_server_log_level = 'info'
let g:ycm_min_num_identifier_candidate_chars = 2
let g:ycm_collect_identifiers_from_comments_and_strings = 1
let g:ycm_complete_in_strings=1
let g:ycm_key_invoke_completion = '<c-z>'
set completeopt=menu,menuone
noremap <c-z> <NOP>
let g:ycm_semantic_triggers = {
¦ \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
¦ \ 'cs,lua,javascript': ['re!\w{2}'],
¦ \ }
let g:ycm_filetype_whitelist = {
¦ \ "c":1,
¦ \ "cpp":1,
¦ \ "objc":1,
¦ \ "sh":1,
¦ \ "zsh":1,
¦ \ "zimbu":1,
¦ \ }
插件管理器:
- vim-plug, Vundle, pathogen, Dein.vim, volt 在vimrc中安裝vim-plug插件: https://github.com/junegunn/vim-plug 使用vim-plug安裝vim-startify
插件的介紹:
參考:玩轉VIM從放棄到愛不釋手