Vim 是一個(gè)上古神器,剛剛接觸的同學(xué)可能很難駕馭,本篇文章主要帶領(lǐng)大家快速入門,并持續(xù)分享當(dāng)前流行的一些 vim-plugin,有興趣的同學(xué)還可以參考 to-vim-tmux-zsh 倉(cāng)庫(kù)繼續(xù)研究 Tmux 和 Zsh。
Vim 的優(yōu)勢(shì)
- Vim 是一個(gè)完全 跨平臺(tái) 的編輯器;
- Vim 是一個(gè)高度 可定制、可擴(kuò)展 的編輯器;
- Vim 有著 良好的生態(tài) 環(huán)境;
新手指南
Vim 模式
- 普通模式: 默認(rèn)模式,可用于文本刪除、替換,恢復(fù)、粘貼等操作;
- 插入模式: 輸入 i 進(jìn)入插入模式,相當(dāng)于普通編輯器的編輯模式;
- 可視模式: 輸入 v 進(jìn)入可視模式,選擇文本,進(jìn)行復(fù)制等操作;
- 命令模式: 輸入 : 進(jìn)入命令模式,可執(zhí)行執(zhí)行內(nèi)部和外部命令;
移動(dòng)光標(biāo)
- hjkl: 上下左右;
- 2w:向前移動(dòng)兩個(gè)單詞;
- 3e:向前移動(dòng)到第 3 個(gè)單詞的末尾;
- 0:移動(dòng)到行首;
- \$:當(dāng)前行的末尾;
- H:光標(biāo)移動(dòng)到頂部;
- M:光標(biāo)移動(dòng)到中間;
- L:光標(biāo)移動(dòng)到底部;
- gf:根據(jù) path 跳轉(zhuǎn)到指定文件;
- gg:第一行;
- G:最后一行;
- 行號(hào) + G:指定行;
- ( ): 移到上一句和下一句;
- { }: 移到上一段和下一段;
- ctrl + o:跳轉(zhuǎn)回之前的位置;
- ctrl + i:返回跳轉(zhuǎn)之前的位置;
- ctrl + d:向下移動(dòng)半頁(yè);
- ctrl + u:向上移動(dòng)半頁(yè);
- ctrl + f:向下移動(dòng)整頁(yè);
- ctrl + b:向上移動(dòng)整頁(yè);
退出
- esc:進(jìn)入普通模式;
- :q!:不保存退出;
- :wq:保存后退出;
刪除
- x:刪除當(dāng)前字符;
- dw:刪除至當(dāng)前單詞末尾;
- de:刪除至當(dāng)前單詞末尾,包括當(dāng)前字符;
- d\$:刪除至當(dāng)前行尾;
- dd:刪除整行;
- 2dd:刪除兩行;
修改
- i:插入文本;
- a:在當(dāng)前字符后面進(jìn)入插入模式;
- A:當(dāng)前行末尾添加;
- r:替換當(dāng)前字符;
- o: 打開新的一行進(jìn)入插入模式;
- s:刪除一個(gè)字符然后進(jìn)入插入模式;
- cc:修改整行;
撤銷
復(fù)制粘貼剪切
- y:復(fù)制
- p:粘貼
- yy:復(fù)制當(dāng)前行
- dd:剪切當(dāng)前行
文件
- :e! 強(qiáng)制刷新該文件
- ctrl + g 顯示當(dāng)前行以及文件信息
查找
- /:正向查找(n:繼續(xù)查找,N:相反方向繼續(xù)查找)
- ?:逆向查找
- %:查找配對(duì)的 {,[,(
替換
- :s/old/new:替換該行第一個(gè)匹配串
- :s/old/new/g:替換全行的匹配串
- :%s/old/new/g:替換整個(gè)文件的匹配串
基本配置
創(chuàng)建 Vim 的配置文件 .vimrc
文件編碼
不和 vi 兼容
備份和撤銷文件
set nobackup
set noswapfile
if has('persistent_undo')
set undofile
set undodir=~/.vim/undodir
if !isdirectory(undodir)
call mkdir(undodir, 'p', 0700)
endif
endif
中文
set fileencodings=ucs-bom,utf-8,gb18030,latin1
鼠標(biāo)支持
if has('mouse')
if has('gui_running') || (term =~ 'xterm' !has('mac'))
set mouse=a
else
set mouse=nvi
endif
endif
set clipboard=unnamed
設(shè)置文本菜單
if has('gui_running')
let do_syntax_sel_menu = 1
let do_no_lazyload_menus = 1
endif
if !has('gui_running')
if has('wildmenu')
set wildmenu
set cpoptions-=
set wildcharm=C-Z>
nnoremap F10> :emenu C-Z>
inoremap F10> C-O>:emenu C-Z>
endif
endif
查找
set ignorecase
set smartcase
set hlsearch
set incsearch
nnoremap silent> F2> :nohlsearchCR>
inoremap silent> F2> C-O>:nohlsearchCR>
顯示行號(hào)
設(shè)置縮進(jìn)
set shiftwidth=2
set tabstop=2
突出顯示當(dāng)前行
啟動(dòng) vim 時(shí)關(guān)閉折疊代碼
主題
syntax enable
colorscheme one
set background=dark
背景透明
hi Normal ctermfg=252 ctermbg=none
插件配置
使用 vim-plug 管理插件
樹形目錄
Plug 'scrooloose/nerdtree' " https://github.com/preservim/nerdtree
Plug 'jistr/vim-nerdtree-tabs' " https://github.com/jistr/vim-nerdtree-tabs
Plug 'Xuyuanp/nerdtree-git-plugin' " https://github.com/Xuyuanp/nerdtree-git-plugin
Plug 'ryanoasis/vim-devicons' " https://github.com/ryanoasis/vim-devicons
Plug 'tiagofumo/vim-nerdtree-syntax-highlight' " https://github.com/tiagofumo/vim-nerdtree-syntax-highlight
Plug 'tpope/vim-eunuch' " https://github.com/tpope/vim-eunuch
map C-n> :NERDTreeToggleCR>
let NERDTreeMinimalUI = 1
let NERDTreeShowHidden = 1
let g:nerdtree_tabs_open_on_console_startup = 1
nnoremap F5> :UndotreeTogglecr>
" i 在新的水平分割的窗口中打開
" s 在新的豎直分割的窗口中打開
" t 在標(biāo)簽頁(yè)中打開
" go 預(yù)覽文件
" r 刷新光標(biāo)所在的目錄
" R 刷新當(dāng)前根路徑
" I 顯示隱藏文件
" m 顯示文件操作菜單
" C 將根路徑設(shè)置為光標(biāo)所在的目錄
" u 設(shè)置上級(jí)目錄為根路徑
" gT 前一個(gè) tab
" gt 后一個(gè) tab
" C-W> 加方向鍵(h、j、k、l、Left> 等)可以在窗口之間跳轉(zhuǎn)
" C-W> + w 跳轉(zhuǎn)到下一個(gè)窗口
" C-W> + s 和 :split 作用相同,把當(dāng)前窗口橫向一分為二
" C-W> + v 和 :vsplit 作用相同,把當(dāng)前窗口縱向一分為二
" C-W> + o 或 :only 只保留當(dāng)前窗口,關(guān)閉其他所有窗口
標(biāo)簽
Plug 'majutsushi/tagbar' " https://github.com/majutsushi/tagbar
nnoremap F9> :TagbarToggleCR>
inoremap F9> C-O>:TagbarToggleCR>
自動(dòng)補(bǔ)全
Plug 'Valloric/YouCompleteMe' " https://github.com/ycm-core/YouCompleteMe
Plug 'Raimondi/delimitMate' " https://github.com/Raimondi/delimitMate
nnoremap Leader>fi :YcmCompleter FixItCR>
nnoremap Leader>gd :YcmCompleter GoToDefinitionCR>
語(yǔ)法高亮,檢查
Plug 'sheerun/vim-polyglot' " https://github.com/sheerun/vim-polyglot
Plug 'w0rp/ale' " https://github.com/w0rp/ale
let g:ale_fix_on_save = 1
let g:ale_sign_column_always = 1
let g:ale_sign_error = '●'
let g:ale_sign_warning = '▶'
nmap silent> C-k> Plug>(ale_previous_wrap)
nmap silent> C-j> Plug>(ale_next_wrap)
全局搜索,快速打開文件
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " https://github.com/junegunn/fzf
Plug 'junegunn/fzf.vim' " https://github.com/junegunn/fzf.vim
Plug 'ctrlpvim/ctrlp.vim' " https://github.com/ctrlpvim/ctrlp.vim
let g:ctrlp_user_command = ['.git', 'cd %s git ls-files -co --exclude-standard']
let g:ctrlp_regexp = 1
" c-r>: 切換匹配模式
" c-t>:在新的 tab 中打開
" :Rg
狀態(tài)條
Plug 'vim-airline/vim-airline' " https://github.com/vim-airline/vim-airline
Plug 'vim-airline/vim-airline-themes' " https://github.com/vim-airline/vim-airline-themes
let g:airline_theme='onedark'
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#formatter = 'unique_tail'
let g:airline#extensions#ale#enabled = 1
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#nerdtree_statusline = 0
let g:airline_section_c = ''
注釋
Plug 'scrooloose/nerdcommenter' " https://github.com/preservim/nerdcommenter
let g:NERDSpaceDelims = 1
let g:NERDDefaultAlign = 'left'
" leader>cspace> 注釋/取消注釋
" leader>ca 切換 // 和 /* */
" leader>cs /* 塊注釋 */
" leader>cm 只用一組符號(hào)注釋
" leader>cA 在行尾添加注釋
git
Plug 'airblade/vim-gitgutter' " https://github.com/airblade/vim-gitgutter
Plug 'tpope/vim-fugitive' " https://github.com/tpope/vim-fugitive
Plug 'tpope/vim-rhubarb' " https://github.com/tpope/vim-rhubarb
set updatetime=100
let g:gitgutter_max_signs = -1
" jump to next hunk: ]c
" jump to previous hunk: [c
" stage the hunk: Leader>hs
" undo the hunk: Leader>hu
" preview the hunk: Leader>hp
" :G
" :Gvdiffsplit
" :GBrowse
"
" s: 加到暫存區(qū)中
" u: 重置加入暫存區(qū)的修改
" =: 切換 diff 顯示
" cc: 提交當(dāng)前暫存區(qū)中的文件
Markdown
Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app yarn install' } " https://github.com/iamcco/markdown-preview.nvim
" :MarkdownPreview
" :MarkdownPreviewStop
Emmet
Plug 'mattn/emmet-vim' " https://github.com/mattn/emmet-vim
let g:user_emmet_leader_key='C-Z>'
" C-Z>,
Prettier
Plug 'prettier/vim-prettier', { 'do': 'npm install' } " https://github.com/prettier/vim-prettier
autocmd BufWritePre *.js,*.jsx,*.mjs,*.ts,*.tsx,*.css,*.less,*.scss,*.json,*.graphql,*.md,*.vue,*.yaml,*.html PrettierAsync
" :PrettierAsync
Wakatime
Plug 'wakatime/vim-wakatime' " https://github.com/wakatime/vim-wakatime "
Whitespace
Plug 'ntpeters/vim-better-whitespace' " https://github.com/ntpeters/vim-better-whitespace
let g:better_whitespace_enabled=1
" :StripWhitespace
總結(jié)
最后,呈上 to-vim-tmux-zsh 倉(cāng)庫(kù)可供參考,顧名思義,除了 vim,還有 tmux 和 zsh 的相關(guān)內(nèi)容。
到此這篇關(guān)于如何讓 vim 成為我們的神器(小結(jié))的文章就介紹到這了,更多相關(guān)vim 使用入門 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Vim 強(qiáng)制保存只讀類型文件的方法
- vi與vim如何修改tab為4個(gè)空格方法示例
- Vim 多行剪切、復(fù)制和刪除功能
- Vim進(jìn)行文件目錄操作小結(jié)
- 解決vim語(yǔ)法高亮不起作用的方法
- vim配置顯示行號(hào)和語(yǔ)法高亮 即.vimrc文件的配置
- Vim中查找替換及正則表達(dá)式的使用詳解
- Vim中特殊字符的讀寫詳解