我可能搞了一個假IDE——使用vim+tmux打造IDE for JavaScript 全棧開發(fā)

寫在前面

1. 為什么要用vim

如果一定要講一個清新脫俗的理由浪漠,那是因為用vim對頸椎和腰椎好(嚴(yán)肅臉)憔晒。使用vim時候某宪,是不需要一只手控制鼠標(biāo)或者觸控板的悼做。當(dāng)兩只手都放在鍵盤上,就能將脖子和雙肩放松囱皿,身體放正勇婴,挺直腰背,目光平視屏幕了嘱腥,咳咳耕渴。

2. 為什么重復(fù)造輪子

Github上關(guān)于vim的配置已經(jīng)有很多了,但沒有真正一統(tǒng)vim界的最佳實踐(如zsh的oh-my-zsh齿兔,emacs的space-emacs橱脸,不過由于space-emacs催生出一個space-vim),所以要打造簡約專屬的IDE分苇,還得自己造輪子添诉。稍微谷歌或百度一下,就會有各種vim配置的教程医寿,思路也基本一致栏赴,所幸不是特別麻煩。

3. 對IDE的需求

IDE的最終效果圖
  • 顯示區(qū)塊: 項目結(jié)構(gòu)靖秩,文件編輯须眷,文件結(jié)構(gòu),Shell操作沟突,Log顯示
  • 主要語言:Javascript花颗,HTML,CSS等
  • 次要語言:Python惠拭,Shell等
  • 使用習(xí)慣:擁有sublime text的眾多特性

在sublime中編輯+terminal中查看log扩劝、執(zhí)行g(shù)it操作,兩者來回切換相當(dāng)麻煩职辅;而webstorm雖然強(qiáng)大今野,但消耗太大。用tmux的多屏復(fù)用+vim的強(qiáng)大插件足以打造一個能滿足以上要求IDE了罐农。

4. 適合本文的讀者

打算用vim打造IDE的新手条霜。沒有耐心的同學(xué)可以拉到最后看總結(jié),直接去各個reference看原始文檔涵亏。希望本文能對你在配置vim過程中有一丟丟幫助宰睡。

開始搭建

1. 準(zhǔn)備工作

環(huán)境:MacOS 或 Linux

$ brew install tmux
  • 安裝vim(必須)
$ brew install vim --with-lua --with-override-system-vi

2. Vim配置

vim編輯器所有的配置都在 ~/.vimrc 下拆内,我們配置下第一個插件Vundle.vim——管理插件的插件旋圆。

2.1. 插件管理

Vundle可以讓你在配置文件中管理插件,并且非常方便的查找麸恍、安裝灵巧、更新或者刪除插件。 還可以幫你自動配置插件的執(zhí)行路徑和生成幫助文件抹沪,相對于Pathongen有巨大優(yōu)勢刻肄。你也可以用NeoBundle或者VimPlug,此處不作展開融欧。

# vundle 安裝
$ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

將下面配置加入到.vimrc文件中

" unleash all Vim power"
set nocompatible 
filetype off     

"  set the runtime path to include Vundle and initialize"
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required"
Plugin 'gmarik/Vundle.vim'

" Vundle List Here"


call vundle#end() 
filetype plugin indent on

接著執(zhí)行安裝命令即可安裝完畢

# 在vim中
:PluginInstall

# 在終端
vim +PluginInstall +qall

為了方便vim配置的管理敏弃,創(chuàng)建新文件~/.vimrc_vundle將以上關(guān)于插件部分的配置寫入其中,然后再從~/.vimrc中引入噪馏。

" ~/.vimrc文件"
set nocompatible 
filetype off

let $CONFIG_DIR = "~/"

" vundle config"
let $VUNDLE_CONFIG = $CONFIG_DIR.".vimrc_vundle"
if filereadable(expand($VUNDLE_CONFIG))
  source $VUNDLE_CONFIG
endif
"~/.vimrc_vundle文件"

"  set the runtime path to include Vundle and initialize"
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" let Vundle manage Vundle, required"
Plugin 'gmarik/Vundle.vim'

" Vundle List Here"


call vundle#end() 
filetype plugin indent on
2.2. 添加vim插件與配置

我們在~/.vimrc中添加插件配置麦到,在~/.vimrc_vundle中添加插件 。vim的插件可以在VimAwesome這個非常awesome的網(wǎng)站上尋找欠肾,它有用Vundle安裝的腳本瓶颠,直接復(fù)制粘貼就行了。

vimawesome的安裝指導(dǎo)

a. 配色主題
所謂顏即是正義刺桃,賞心悅目的配色主題很重要步清。我用的配色是 molokai 主題

"~/.vimrc_vundle文件"

" Vundle List Here"
Plugin 'tomasr/molokai'
" ~/.vimrc文件"

" vim theme"
colorscheme molokai

b. 項目結(jié)構(gòu)
左窗口用 NerdTree插件 Plugin 'scrooloose/nerdtree',是一個用于瀏覽目錄結(jié)構(gòu)的插件虏肾,配置如下:

" NERDTree"
let NERDChristmasTree=0
let NERDTreeWinSize=35
let NERDTreeChDirMode=2
let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$']
let NERDTreeShowBookmarks=1
let NERDTreeWinPos="left"
let g:nerdtree_tabs_open_on_gui_startup=1
let g:nerdtree_tabs_open_on_console_startup=1

autocmd vimenter * if !argc() | NERDTree | endif
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif
nmap <F5> :NERDTreeToggle<cr>

c. 文件結(jié)構(gòu)
右窗口用 tagbar插件 Plugin 'majutsushi/tagbar,為我們提供了一個簡單的方式去瀏覽當(dāng)前文件的結(jié)構(gòu)欢搜,并且支持在各個標(biāo)簽之間快捷的跳轉(zhuǎn)封豪。配置如下:

" Tagbar"
let g:tagbar_width=35
let g:tagbar_autofocus=1
nmap <F6> :TagbarToggle<CR>

" parse markdown"
let g:tagbar_type_markdown = {
  \ 'ctagstype' : 'markdown',
  \ 'kinds' : [
    \ 'h:Heading_L1',
    \ 'i:Heading_L2',
    \ 'k:Heading_L3'
  \ ]
\ }

使用tagbar還需要安裝 Exuberant ctags

$ brew install ctags

由此,左右兩側(cè)的導(dǎo)航插件安裝完成炒瘟。按F5和F6喚出左右窗口吹埠,窗口之間的切換使用ctrl+w。

d. 對js文件結(jié)構(gòu)分析的優(yōu)化
tagbar本身對javascript的分析不夠疮装,所以還需要額外的插件去支持對javascr以及ES6做標(biāo)簽化處理缘琅,推薦解決方案 是使用jsctags,當(dāng)然也可以采用其他tagbar在wiki中的其他方案廓推。關(guān)于jsctags的解決方式如下:

  • 用 vundle 安裝 tern_for_vim 插件
  • ~/.vim/bundle/tern_for_vim 下執(zhí)行 npm install
  • 安裝 jsctags
npm install -g git+https://github.com/ramitos/jsctags.git
  • ~/.vimrc 添加對js處理的配置
let g:tagbar_type_javascript = {
  \ 'ctagsbin' : 'jsctags'
\ }

e. 其他實用的插件

  • ctrlp 全局搜索
  • vim-airline 狀態(tài)欄
  • YouCompleteMe 自動補(bǔ)全
  • vim-gitgutter 基于git diff顯示代碼變動
  • vim-javascript 更多js語法高亮

vim的插件相當(dāng)多刷袍,按需裝載即可,就不一一列舉了樊展。這里記錄一個坑呻纹,vim-airline狀態(tài)欄的箭頭要正確顯示堆生,需要安裝powerline-font,然后在iterm2中啟用non-ASCII的字體

iterm2中啟用non-ASCII

3. tmux配置

正如文章一開始的截圖所以展示的雷酪,左下方窗口是shell 操作區(qū)淑仆,右下窗口是log 輸出區(qū)域。其本質(zhì)是用tmux 創(chuàng)建了3個panel 哥力,上面1個用vim打開蔗怠,下面左右各2個,左側(cè)可以執(zhí)行g(shù)it 命令吩跋,右側(cè)啟動server 查看log

3.1. 打開tmux

執(zhí)行命令tmux寞射,創(chuàng)建一個窗口

$ tmux
3.1. 分屏

待開啟了一個窗口之后,只需再按住 ctrl-b% 钞澳,一個豎直窗格就出現(xiàn)了怠惶。另外,若要把屏幕沿水平方向分割轧粟,則只需要按下 ctrl-b"策治。切換tmux之間的窗口只要按下 ctrl-b + 方向鍵。

3.3. tmux 的快捷鍵前綴

剛剛所按住的 ctrl-b 是tmux的快捷鍵前綴兰吟,是用來區(qū)分tmux命令和其他shell命令的通惫,為了方便按鍵,我們將修改這個前綴為ctrl-a

" ~/.tmux.conf 文件
unbind C-b
set -g prefix C-a

如果將ctrl鍵和caps lock鍵功能對調(diào)那就更方便了混蔼。按鍵習(xí)慣因人而異履腋,開心就好。

3.4. 在tmux中vim的高亮不對

~/.vimrc 中加以下配置即可

if exists('$TMUX')
  set term=screen-256color
endif
3.5. 調(diào)整窗格布局

此時上面的窗格和下面2個窗格是等分的惭嚣,將vim主窗口調(diào)整的更大一點遵湖,才更合理點。我們使用以下tmux命令晚吞,注意要按前綴ctrl-a延旧,然后像vim一樣按:

resize-pane [-DLRUZ] [-x width] [-y height] [-t target-pane] [adjustment]

比如窗格0高度偏移25

:resize-pane -t 0 -y 25
3.6. 更多關(guān)于tmux

以上操作完成后,基本形成一個像截圖所示的IDE了槽地。關(guān)于tmux的window迁沫,panel,session的概念捌蚊、其他的快捷操作等等集畅,網(wǎng)上有許多教程可以參考,不在此贅述缅糟。
tmux非常強(qiáng)大挺智,你甚至可以做結(jié)對編程:將tmux的session地址分享給他人,別人可以通過ssh接入這個session窗宦,進(jìn)行協(xié)同操作逃贝。

總結(jié)

  • 用tmux分屏谣辞,主屏打開vim,其他屏可以啟動server查看log沐扳、執(zhí)行g(shù)it命令做版本管理等
  • vim的配置文件是 ~/.vimrc泥从,用 vim-scripts 配置
  • 插件匯總在 VimAwesome 網(wǎng)站上,可以用 Vundle.vim 管理
  • 配置可以通過參考Github上眾多的 vim的配置COPY-PASTE-MODIFY沪摄,所以我的vim配置也就沒必要完整附上了
  • vim的操作訓(xùn)練可以用 vim大冒險 這個游戲來完成
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末躯嫉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子杨拐,更是在濱河造成了極大的恐慌祈餐,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哄陶,死亡現(xiàn)場離奇詭異帆阳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)屋吨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蜒谤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人至扰,你說我怎么就攤上這事鳍徽。” “怎么了敢课?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵阶祭,是天一觀的道長。 經(jīng)常有香客問我直秆,道長濒募,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任圾结,我火速辦了婚禮瑰剃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疫稿。我一直安慰自己,他們只是感情好鹃两,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布遗座。 她就那樣靜靜地躺著,像睡著了一般俊扳。 火紅的嫁衣襯著肌膚如雪途蒋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天馋记,我揣著相機(jī)與錄音号坡,去河邊找鬼懊烤。 笑死,一個胖子當(dāng)著我的面吹牛宽堆,可吹牛的內(nèi)容都是我干的腌紧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼畜隶,長吁一口氣:“原來是場噩夢啊……” “哼壁肋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起籽慢,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤浸遗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后箱亿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跛锌,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年届惋,在試婚紗的時候發(fā)現(xiàn)自己被綠了髓帽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡盼樟,死狀恐怖氢卡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晨缴,我是刑警寧澤译秦,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站击碗,受9級特大地震影響筑悴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稍途,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一阁吝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧械拍,春花似錦突勇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迄损,卻和暖如春定躏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工痊远, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留垮抗,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓碧聪,卻偏偏與公主長得像冒版,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子矾削,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

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