echo ----vim----
:set nu
:vs :sp 分屏
a/i/o A/I/O 進入插入模式
v 是塊狀選擇 V是以行為單位選擇 ctrl+v是區(qū)域選擇 y是復制,x是剪切, 然后p是粘貼 d是剪貼
viw 首先v進入選擇模式 iw選擇當前單詞 但是不帶空格;vaw選擇當前單詞,(帶空格)
vi" 首先v進入選擇模式, i" 選擇當前行 ”“包含的內容,然后進行操作; va"是選擇""包含的內容,包含”“。
在編輯模式下:ctrl+h 刪除上一個字符 ctrl+w 刪除上一個單詞 crtl+u 刪除當前行 也可以在終端下使用(ctrl+a 快速定位到開頭)
ctrl+[ 或者 ctrl +c 快速切換到normal模式 代替ESC
gi 快速跳轉到你最后一次編輯的地方并進入編輯模式
w/W 快速移動到下一個單詞的開頭 e/E快速移動到上一個單詞的結尾 b/B快速移動到上一個單詞的開頭(如果移動到上一個單詞的結尾,那么就是be, 如果想移動到單詞的結尾的話,那么就是we)
(小寫和大寫w、e、b的區(qū)別在于,大寫的話會以空格為分隔符
:syntax on 設置高亮
快速搜索
使用 f{char} 快速移動到char字符上,t移動到char的前一個字符,如果第一次沒有搜到,那么使用分號;搜索下一個; 使用逗號,搜索上一個
f是往后搜索,F(xiàn)是往前搜索
0是移動到行首 $是移動到行尾 ^是快速移動到行首(沒有空格的地方,與0的區(qū)別在于。0是真的行首 ^是非空行首)
使用()在句子間移動,{}在段落之間移動
gg/G 移動到文件開頭和結尾,你可以使用ctrl+o 快速返回
H/M/L 跳轉到屏幕的開頭(head) 中間(middle)和結尾(lower)
ctrl+u ctrl+f 上下翻頁, zz把屏幕置為中間
在normal 模式下快速刪除
x 快速刪除一個字符,2x刪除2個字符;
d配合文本對象快速刪除一個單詞daw
d和x都可以搭配數字來執(zhí)行
dw 是從光標開始到單詞結尾的刪除(包含刪除空格)
daw 是刪除光標所在的單詞(包含刪除空格) diw是刪除光標所在的單詞(不刪除空格)
d2aw 刪除2個單詞,可搭配數字使用
dd 是刪除行 5dd是刪除5行
dt " 是從光標下到“之間的內容刪除掉
d0 d$ 快速刪除到開頭/行尾
快速修改
r(replace)快速修改 2r是同時修改2個單詞 R
s 是刪除單個單詞并且進入插入模式,2s 刪除2個單詞并且進入插入模式, S是刪除正行并且進入插入模式
c 也是刪除并且進入插入模式, cw 從光標下開始刪除單詞并且進入插入模式 caw刪除光標下單詞并且進入插入模式 ct” 從光標下到“開始刪除,然后進去插入模式 c to " ci" 快速刪除當前行”“包含的內容,然后進入插入模式; ca" 快速刪除當前行”“包含的內容,包含""
r是修改單個字母 s是修改多個字母并且進入插入模式 c是配合單詞 cw caw ct來使用
查詢
使用/ 或者 ?進行前向或者反向搜索
使用n/N跳轉到下一個或者上一個匹配
使用或者#進行當前單詞的前向匹配和后向匹配
(當時會用?和#進行后向匹配的時候,n是往上走,N是往下走,跟/和相反了)
搜索替換
替換 :% s/old/new/g(g是全局替換 c是確認后替換,n是報告匹配的次數而不替換,可以用來查詢匹配次數) (%是全部 可以是數字 1-10;表示1到10行)
統(tǒng)計個數 :% s/new//n 統(tǒng)計個數
也可以使用正則表達式替換
Buffer切換
使用:ls 會列舉當前緩沖區(qū),然后使用:b n跳轉到第n個緩沖區(qū)
:bpre :bnext :bfirst :blast 上一個 下一個 第一個 最后一個
或者使用:b buffer_name 加上tab補全來跳轉
:vs 左右分屏 :sp 上下分屏 ; ctrl+w + w(在窗口間循環(huán)切換) ctrl+w+h、j、k、l 切換到左邊、下邊、上邊、右邊的窗口
:ctrl+w +HJKL把當前窗口往左邊、下邊、上邊、右邊移動
[N]ctrl+w+_ 設置活動窗口的高度為N行
[N]ctrl+w+| 設置活動窗口的高度為N列
Tab標簽頁操作
:tabe {filename} 在新的標簽頁打開{filename}文件,也可以直接:tabe 新建一個空的標簽頁
:tabc 關閉當前標簽頁
:tabo 只保留活動標簽頁,關閉所有其他標簽頁
:tabn {N} 或者 {N} gt 切換到編號為{N}的標簽頁
:tabn 或者gt 切換到下一個標簽頁
:tabp 或者gT切換到上一個標簽頁
text object - 文本對象
vim復制粘貼與寄存器的使用
yim 復制一個單詞 yy復制一行 p是粘貼
insert模式下復制粘貼會縮進的問題
- 設置 :set paste 然后粘貼 最后:set nopaste
vim復制到系統(tǒng)剪貼板
首先查看vim是否支持clipboard( vim --version | grep clipboard) 如果clipboard前面是+號就支持
然后復制 v "+y 就可以完成復制了
vim 宏
qa 進入編輯模式,然后修改,然后EST進入normal模式,按q退出錄制
然后進入下一行@a 把錄制的內容粘貼
也可以批量 VG 選擇所有,然后:normal @a 批量操作
感覺就是錄制很多命令,然后一行一行的執(zhí)行錄制的命令
也可以 VG選擇所有只有 :normal I#
:ctrl +P 現(xiàn)實上一次執(zhí)行的命令
常見的三種補全類型
ctrl+n和ctrl+p 補全單詞, 使用N(shift+n)進行下一個,P(shift+p)進行上一個選擇
ctrl+x ctrl+f 補全文件名;繼續(xù)使用ctrl+n ctrl+p 進行下一個或者上一個進行賽選
ctrl+x ctrl+o 補全代碼,需要開啟文件類型檢查,安裝插件
修改配色方案
:colorscheme <ctrl+d> 顯示所有配色
:colorschema 配色
映射
:map 新的快捷鍵 要映射的快捷鍵 eg: :map - x 把x的功能隱射到-號上去
vim 常用模式 normal/visual/insert都可以映射
用:nmap :vmap :imap 定義映射只在normal、visual、insert分別有效
:imap <c-u> <Esc>ddi 把insert模式下的刪除一行映射到ddi
vim 提供了非遞歸映射,這些命令不會遞歸解析
使用*map 對應的 nnoremap vnoremap inoremap
任何時候你都應該使用非遞歸映射,拯救自己和插件作者
nerdtree目錄樹快捷鍵
o 打開文件
go 打開文件,但是光標還在nerdtree
t 打開文件,創(chuàng)建的是tab;T是打開文件,創(chuàng)建的是tab,光標停留在nerdtree
x 收起當前打開的目錄 X收起所有打開的目錄
P 跳轉到當前的根路徑 p跳轉到光標所在的上一級路徑 px 關閉當前根目錄 PX關閉整體
u 設置上級目錄為根目錄 U設置上級目錄為根目錄,但是維持打開狀態(tài)
C 將根路徑設置為光標所在的目錄
r 刷新光標所在的目錄 R刷新當前根路徑
I顯示或者不顯示一場文件
q 關閉nerdtree
A 全屏顯示nerdtree ,或者關閉全屏顯示
m 新建文件或者文件夾
:NERDTree 打開目錄樹
gcc 添加注析:
-----------vim的配置 (使用 vim-plug 管理工具)------------
set number
set modifiable
syntax on
"colorscheme SpaceVim
:nnoremap <c-h> <c-w>h
:nnoremap <c-j> <c-w>j
:nnoremap <c-k> <c-w>k
:nnoremap <c-l> <c-w>l
" 安裝插件 使用插件管理工具 vim-plug "
call plug#begin('~/.vim/plugged')
"
Plug 'mhinz/vim-startify'
" 目錄樹
Plug 'preservim/nerdtree'
"
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'yggdroot/indentline'
"Plug 'ctrlpvim/ctrlp.vim' # 搜索功能,感覺不好用
"Plug 'easymotion/vim-easymotion'
"Plug 'junegunn/fzf.vim' "搜索
" 主題風格
Plug 'w0ng/vim-hybrid'
" 大綱
Plug 'majutsushi/tagbar'
" 補全功能
" if has('nvim')
" Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
" else
" Plug 'Shougo/deoplete.nvim'
" Plug 'roxma/nvim-yarp'
" Plug 'roxma/vim-hug-neovim-rpc'
" endif
" 格式化
Plug 'sbdchd/neoformat'
" 快速注析
Plug 'tpope/vim-commentary'
Plug 'artur-shaik/vim-javacomplete2'
let g:deoplete#enable_at_startup = 1
call plug#end()
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
autocmd StdinReadPre * let s:std_in=1
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | exe 'cd '.argv()[0] | endif
"let g:ctrlp_map = '<c-p>'
"nmap ss <Plug>(easymotion-s2)
set background=dark
colorscheme hybrid
nmap <F8> :TagbarToggle<CR>
" 補全java代碼
let mapleader=","
autocmd FileType java setlocal omnifunc=javacomplete#Complete
nmap <F4> <Plug>(JavaComplete-Imports-AddSmart)
imap <F4> <Plug>(JavaComplete-Imports-AddSmart)
nmap <F5> <Plug>(JavaComplete-Imports-Add)
imap <F5> <Plug>(JavaComplete-Imports-Add)
nmap <F6> <Plug>(JavaComplete-Imports-AddMissing)
imap <F6> <Plug>(JavaComplete-Imports-AddMissing)
nmap <F7> <Plug>(JavaComplete-Imports-RemoveUnused)
imap <F7> <Plug>(JavaComplete-Imports-RemoveUnused)
"
"nmap <leader>jI <Plug>(JavaComplete-Imports-AddMissing)
"nmap <leader>jR <Plug>(JavaComplete-Imports-RemoveUnused)
"nmap <leader>ji <Plug>(JavaComplete-Imports-AddSmart)
"nmap <leader>jii <Plug>(JavaComplete-Imports-Add)
"
"imap <C-j>I <Plug>(JavaComplete-Imports-AddMissing)
"imap <C-j>R <Plug>(JavaComplete-Imports-RemoveUnused)
"imap <C-j>i <Plug>(JavaComplete-Imports-AddSmart)
"imap <C-j>ii <Plug>(JavaComplete-Imports-Add)
"
"nmap <leader>jM <Plug>(JavaComplete-Generate-AbstractMethods)
"
"imap <C-j>jM <Plug>(JavaComplete-Generate-AbstractMethods)
"
nmap <leader>jA <Plug>(JavaComplete-Generate-Accessors)
nmap <leader>js <Plug>(JavaComplete-Generate-AccessorSetter)
nmap <leader>jg <Plug>(JavaComplete-Generate-AccessorGetter)
nmap <leader>ja <Plug>(JavaComplete-Generate-AccessorSetterGetter)
nmap <leader>jts <Plug>(JavaComplete-Generate-ToString)
nmap <leader>jeq <Plug>(JavaComplete-Generate-EqualsAndHashCode)
nmap <leader>jc <Plug>(JavaComplete-Generate-Constructor)
nmap <leader>jcc <Plug>(JavaComplete-Generate-DefaultConstructor)
"
"imap <C-j>s <Plug>(JavaComplete-Generate-AccessorSetter)
"imap <C-j>g <Plug>(JavaComplete-Generate-AccessorGetter)
"imap <C-j>a <Plug>(JavaComplete-Generate-AccessorSetterGetter)
"
"vmap <leader>js <Plug>(JavaComplete-Generate-AccessorSetter)
"vmap <leader>jg <Plug>(JavaComplete-Generate-AccessorGetter)
"vmap <leader>ja <Plug>(JavaComplete-Generate-AccessorSetterGetter)
"
nmap <silent> <buffer> <leader>jn <Plug>(JavaComplete-Generate-NewClass)
nmap <silent> <buffer> <leader>jN <Plug>(JavaComplete-Generate-ClassInFile)