如何讓 vim 成為我們的神器

Vim 是一個(gè)上古神器凯肋,剛剛接觸的同學(xué)可能很難駕馭门烂,本篇文章主要帶領(lǐng)大家 快速入門(mén)宙枷,并 持續(xù)分享 當(dāng)前流行的一些 vim-plugin

安裝

sudo apt-get install vim  // Ubuntu

新手指南

vimtutor  // vim 教程

移動(dòng)光標(biāo)

# hjkl
# 2w 向前移動(dòng)兩個(gè)單詞
# 3e 向前移動(dòng)到第 3 個(gè)單詞的末尾
# 0 移動(dòng)到行首
# $ 當(dāng)前行的末尾
# gg 文件第一行
# G 文件最后一行
# 行號(hào)+G 指定行
# <ctrl>+o 跳轉(zhuǎn)回之前的位置
# <ctrl>+i 返回跳轉(zhuǎn)之前的位置

退出

# <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)前行末尾添加
# r 替換當(dāng)前字符
# o 打開(kāi)新的一行并進(jìn)入插入模式

撤銷(xiāo)

# u 撤銷(xiāo)
# <ctrl>+r 取消撤銷(xiāo)

復(fù)制粘貼剪切

# v 進(jìn)入可視模式
# y 復(fù)制
# p 粘貼
# yy 復(fù)制當(dāng)前行
# dd 剪切當(dāng)前行

文件

# :e! 強(qiáng)制刷新該文件
# <ctrl>+g 顯示當(dāng)前行以及文件信息

查找

# / 正向查找(n:繼續(xù)查找甚疟,N:相反方向繼續(xù)查找)
# 仗岖? 逆向查找
# % 查找配對(duì)的 {,[览妖,(
# :set ic 忽略大小寫(xiě)
# :set noic 取消忽略大小寫(xiě)
# :set hls 匹配項(xiàng)高亮顯示
# :set is 顯示部分匹配

替換

# :s/old/new 替換該行第一個(gè)匹配串
# :s/old/new/g 替換全行的匹配串
# :%s/old/new/g 替換整個(gè)文件的匹配串

折疊

# zc 折疊
# zC 折疊所有嵌套
# zo 展開(kāi)折疊
# zO 展開(kāi)所有折疊嵌套

執(zhí)行外部命令

# :!shell 執(zhí)行外部命令

字體

# <ctrl> - 縮小
# <ctrl> shift + 放大
# <ctrl> 0 還原

基本配置

.vimrcVim 的配置文件轧拄,需要我們自己創(chuàng)建

cd
touch .vimrc 

取消備份

set nobackup
set noswapfile

文件編碼

set encoding=utf-8

查找

set ic
set hls
set is

顯示行號(hào)

set number

顯示光標(biāo)當(dāng)前位置

set ruler

設(shè)置縮進(jìn)

set cindent

set tabstop=2
set shiftwidth=2

突出顯示當(dāng)前行

set cursorline

左下角顯示當(dāng)前 vim 模式

set showmode

代碼折疊

set nofoldenable

主題

syntax enable
set background=dark
colorscheme solarized

插件配置

使用 vim-plug 管理插件

樹(shù)形目錄

Plug 'scrooloose/nerdtree'
Plug 'jistr/vim-nerdtree-tabs'
Plug 'Xuyuanp/nerdtree-git-plugin'

autocmd vimenter * NERDTree
map <C-n> :NERDTreeToggle<CR>
let NERDTreeMinimalUI = 1
let NERDTreeShowHidden = 1

let g:nerdtree_tabs_open_on_console_startup = 1
let g:nerdtree_tabs_focus_on_files = 1

let g:NERDTreeIndicatorMapCustom = {
    \ "Modified"  : "?",
    \ "Staged"    : "?",
    \ "Untracked" : "?",
    \ "Renamed"   : "?",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "?",
    \ "Dirty"     : "?",
    \ "Clean"     : "??",
    \ 'Ignored'   : '?',
    \ "Unknown"   : "?"
    \ }

# o 打開(kāi)關(guān)閉文件或目錄
# e 以文件管理的方式打開(kāi)選中的目錄
# t 在標(biāo)簽頁(yè)中打開(kāi)
# T 在標(biāo)簽頁(yè)中打開(kāi),但光標(biāo)仍然留在 NERDTree
# r 刷新光標(biāo)所在的目錄
# R 刷新當(dāng)前根路徑
# X 收起所有目錄
# p 小寫(xiě)讽膏,跳轉(zhuǎn)到光標(biāo)所在的上一級(jí)路徑
# P 大寫(xiě)檩电,跳轉(zhuǎn)到當(dāng)前根路徑
# J 到第一個(gè)節(jié)點(diǎn)
# K 到最后一個(gè)節(jié)點(diǎn)
# I 顯示隱藏文件
# m 顯示文件操作菜單
# C 將根路徑設(shè)置為光標(biāo)所在的目錄
# u 設(shè)置上級(jí)目錄為根路徑
# ctrl + w + w 光標(biāo)自動(dòng)在左右側(cè)窗口切換
# ctrl + w + r 移動(dòng)當(dāng)前窗口的布局位置
# :tabc 關(guān)閉當(dāng)前的 tab
# :tabo   關(guān)閉所有其他的 tab
# :tabp   前一個(gè) tab
# :tabn   后一個(gè) tab
# gT      前一個(gè) tab
# gt      后一個(gè) tab

代碼,引號(hào)府树,路徑補(bǔ)全

Plug 'Valloric/YouCompleteMe'
Plug 'Raimondi/delimitMate'
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }

語(yǔ)法高亮俐末,檢查

Plug 'sheerun/vim-polyglot'
Plug 'w0rp/ale'

let g:ale_linters = {
\   'javascript': ['eslint'],
\   'css': ['stylelint'],
\}
let g:ale_fixers = {
\   'javascript': ['eslint'],
\   'css': ['stylelint'],
\}
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)

文件,代碼搜索奄侠,打開(kāi)最近打開(kāi)的文件

Plug 'rking/ag.vim'
Plug 'kien/ctrlp.vim'
Plug 'vim-scripts/mru.vim'

let g:ag_highlight=1
let g:ag_working_path_mode="r"

# :Ag! content

set wildignore+=*.zip,*.exe

let g:ctrlp_map = '<c-p>'
let g:ctrlp_custom_ignore = {
  \ 'dir':  '\v[\/](node_modules|DS_Store|dist|build|coverage)|(\.(git|hg|svn)$)',
  \ 'file': '\v\.(exe|so|dll)$',
  \ }

# <c-r>: 切換匹配模式
# <c-t> or <c-v>, <c-x>:在新的 tab 中打開(kāi)

let MRU_Exclude_Files = '^/tmp/.*\|^/var/tmp/.*'
let MRU_Window_Height = 15

# :MRU

加強(qiáng)版狀態(tài)欄

Plug 'itchyny/lightline.vim'

let g:lightline = {
      \ 'colorscheme': 'powerline',
      \ 'active': {
      \   'left': [ [ 'mode', 'paste' ],
      \             [ 'gitbranch', 'readonly', 'filename', 'modified', 'helloworld' ] ],
      \   'right': [ [ 'lineinfo' ],
      \              [ 'percent' ],
      \              [ 'fileformat', 'fileencoding', 'filetype' ] ]
      \ },
      \ 'component': {
      \   'helloworld': 'Hello, 楓上霧棋!'
      \ },
      \ 'component_function': {
      \   'gitbranch': 'fugitive#head'
      \ },
      \ }

代碼注釋

Plug 'scrooloose/nerdcommenter'

# <leader>c<space> 注釋/取消注釋
# <leader>cc // 注釋
# <leader>cm 只用一組符號(hào)注釋
# <leader>cA 在行尾添加注釋
# <leader>c$ /* 注釋 */
# <leader>cs /* 塊注釋 */
# <leader>cy 注釋并復(fù)制
# <leader>ca 切換 // 和 /* */
# <leader>cu 取消注釋

let g:NERDSpaceDelims = 1
let g:NERDDefaultAlign = 'left'
let g:NERDCustomDelimiters = {
            \ 'javascript': { 'left': '//', 'leftAlt': '/**', 'rightAlt': '*/' },
            \ 'less': { 'left': '/**', 'right': '*/' }
        \ }

let g:NERDAltDelims_javascript = 1
let g:NERDDefaultNesting = 0

git

Plug 'airblade/vim-gitgutter'
Plug 'tpope/vim-fugitive'

Markdown

Plug 'suan/vim-instant-markdown'
Plug 'junegunn/goyo.vim'
Plug 'amix/vim-zenroom2'

let g:instant_markdown_slow = 1
let g:instant_markdown_autostart = 0
# :InstantMarkdownPreview

# :Goyo

Emmet

Plug 'mattn/emmet-vim'

let g:user_emmet_leader_key='<C-Z>'
let g:user_emmet_settings = {
        \ 'javascript.jsx' : {
            \ 'extends' : 'jsx',
        \ },
        \ }

html 5

Plug 'othree/html5.vim'

css 3

Plug 'hail2u/vim-css3-syntax'
Plug 'ap/vim-css-color'

augroup VimCSS3Syntax
  autocmd!

  autocmd FileType css setlocal iskeyword+=-
augroup END

JavaScipt

Plug 'pangloss/vim-javascript'

let g:javascript_plugin_jsdoc = 1
let g:javascript_plugin_ngdoc = 1
let g:javascript_plugin_flow = 1
set foldmethod=syntax
let g:javascript_conceal_function             = "?"
let g:javascript_conceal_null                 = "?"
let g:javascript_conceal_this                 = "@"
let g:javascript_conceal_return               = "?"
let g:javascript_conceal_undefined            = "?"
let g:javascript_conceal_NaN                  = "?"
let g:javascript_conceal_prototype            = "?"
let g:javascript_conceal_static               = "?"
let g:javascript_conceal_super                = "Ω"
let g:javascript_conceal_arrow_function       = "?"
let g:javascript_conceal_noarg_arrow_function = "??"
let g:javascript_conceal_underscore_arrow_function = "??"
set conceallevel=1

React

Plug 'mxw/vim-jsx'

let g:jsx_ext_required = 0

Prettier

Plug 'prettier/vim-prettier', {
  \ 'do': 'yarn install',
  \ 'for': ['javascript', 'typescript', 'css', 'less', 'scss', 'json', 'graphql'] }

let g:prettier#config#bracket_spacing = 'true'
let g:prettier#config#jsx_bracket_same_line = 'false'
let g:prettier#config#trailing_comma = 'es5'
let g:prettier#autoformat = 0
autocmd BufWritePre *.js,*.jsx,*.mjs,*.ts,*.tsx,*.css,*.less,*.scss,*.json,*.graphql PrettierAsync

# :Prettier

自動(dòng)規(guī)范化中文排版

Plug 'hotoo/pangu.vim'

# :Pangu

總結(jié)

最后卓箫,提供 to-vim-tmux-zsh 倉(cāng)庫(kù)可供參考,其中垄潮,除包含 vim 的配置烹卒,還有 tmuxzsh 的分享

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市弯洗,隨后出現(xiàn)的幾起案子旅急,更是在濱河造成了極大的恐慌,老刑警劉巖牡整,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藐吮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡果正,警方通過(guò)查閱死者的電腦和手機(jī)炎码,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)秋泳,“玉大人潦闲,你說(shuō)我怎么就攤上這事∑戎澹” “怎么了歉闰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵辖众,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我和敬,道長(zhǎng)凹炸,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任昼弟,我火速辦了婚禮啤它,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘舱痘。我一直安慰自己变骡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布芭逝。 她就那樣靜靜地躺著塌碌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪旬盯。 梳的紋絲不亂的頭發(fā)上台妆,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音胖翰,去河邊找鬼接剩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛泡态,可吹牛的內(nèi)容都是我干的搂漠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼某弦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼桐汤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起靶壮,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤怔毛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后腾降,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拣度,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年螃壤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抗果。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奸晴,死狀恐怖冤馏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寄啼,我是刑警寧澤逮光,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布代箭,位于F島的核電站,受9級(jí)特大地震影響涕刚,放射性物質(zhì)發(fā)生泄漏嗡综。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一杜漠、第九天 我趴在偏房一處隱蔽的房頂上張望极景。 院中可真熱鬧,春花似錦驾茴、人聲如沸戴陡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至异吻,卻和暖如春裹赴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诀浪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工棋返, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雷猪。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓睛竣,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親求摇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子射沟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 安裝依賴(lài)庫(kù)(支持Python 3、Lua与境、Ruby) sudo apt-get install libncurse...
    Cyfeng閱讀 2,096評(píng)論 0 2
  • leoatchina的vim配置文件 This is leoatchina's vim config forked...
    leoatchina閱讀 3,979評(píng)論 0 2
  • macvim配置 最終效果如下: 系統(tǒng)環(huán)境 macos10.12.4 homebrew1.2.1 python3....
    Like_eb56閱讀 69,268評(píng)論 5 65
  • 計(jì)算機(jī)網(wǎng)絡(luò)中的帶寬验夯、交換結(jié)點(diǎn)中的緩存和處理機(jī)等,都是網(wǎng)絡(luò)的資源摔刁。在某段時(shí)間挥转,若對(duì)網(wǎng)絡(luò)中某一資源的需求超過(guò)了該資源所...
    wayyyy閱讀 480評(píng)論 0 0
  • 遇見(jiàn)無(wú)聲的文字绑谣,遇見(jiàn)有溫度的你! 文|若初 圖|網(wǎng)絡(luò) “怎么辦呀拗引?我這次考試可能要完蛋了···” “好惶恐啊借宵,這份...
    若初的星辰大海閱讀 635評(píng)論 0 2