帶上你的Vim,走湿痢!

每個Vimer都有自己的一個配置涝缝,猶如每個劍客都有自己的一把劍(應該是吧)。(爭绕┲亍)作為一個傳說中的全棧開發(fā)者拒逮,換機器就像換衣服一樣頻繁;在“異國他鄉(xiāng)”的機器上臀规,是否懷念那一套屬于你的指法呢滩援?下面會講一下我在 Windows 上打包Vim的一些經(jīng)驗。帶上你的Vim塔嬉,走玩徊!

下面講到的配置主要出自我自用的Vim配置VimConf,感興趣的可以參考谨究!

圖文無(大)關

一鍵裝機之Vimrc

Vim的幾乎所有配置都可以保存在一個vimrc文件中恩袱,因此把vimrc同步起來,直接拷貝到相應位置并指定胶哲,則可以恢復相應的Vim配置畔塔。所以很多Vimer的做法是建立一個Github倉庫保存vimrc,在新的機器上只要Clone該倉庫就可以將配置同步到該機器上鸯屿。

得到配置文件后澈吨,還需要將該文件拷貝到對應的位置并應用,且可能還需要其他一些輔助文件寄摆。因此谅辣,為了一勞永逸,一般都會添加一個初始化腳本進行“一鍵安裝”冰肴。而Linux和Windows上配置文件的位置還不太一樣屈藐,因此榔组,往往就需要各自一個腳本了熙尉。

下面講講在Clone了配置文件后联逻,Windows下的腳本文件應該干些啥。

首先你得有GVim

where gvim > NUL 2> NUL
if %ERRORLEVEL% NEQ 0 (
    echo GVim is needed >&2
    set /A ret=1
    goto :end
)
for /f "tokens=*" %%i in ('where gvim 2^> NUL') do set vim_folder=%%i
if /I "%vim_folder:~-3%" EQU "bat" (
    findstr /b /c:"set VIM_EXE_DIR=" "!vim_folder!" > tmp\vim_folder.txt 2> NUL
    set /p vim_folder=<tmp\vim_folder.txt
    set vim_folder=!vim_folder:~16!
) else (
    call :get_parent_dir "%vim_folder%" vim_folder
)
if not exist "%vim_folder%\gvim.exe" (
    echo Failed to locate GVim
    set /A ret=1
    goto :end
)
echo Found GVim in %vim_folder%

通過where gvim獲得當前GVim可執(zhí)行文件的路徑检痰。有可能是一個啟動腳本GVim.bat包归,因此需要進一步分析該腳本,獲取GVim的真實路徑铅歼。

沒有GVim就沒有一切了公壤,所以必須安裝好GVim。

其次你得有Git

where git > NUL 2> NUL

同樣椎椰,沒有Git也就沒有一切了厦幅,所以必須安裝好Git。

更新子模塊

我的vimrc中包含了一個配色子模塊 Detorte慨飘,因此這里需要初始化該模塊确憨。

git submodule update --init > NUL 2> NUL

執(zhí)行后,配置根目錄下的detorte目錄會包含配色方案的相關文件瓤的,下面需要將這些文件拷貝到指定位置休弃。

拷貝配色方案

因為我使用的是自己的配色方案,所以這里需要將其拷貝到指定的位置圈膏,以便Vim能檢測到該方案塔猾。

set detorte_folder=%vimfiles_folder%\colors
xcopy /Y /i detorte\colors %detorte_folder% /s /e > NUL 2> NUL

安裝Vundle

我使用的是Vundle進行Vim插件管理,所以為了之后能安裝Vim插件稽坤,這里需要把Vundle下載并安裝好丈甸。我們直接從Vundle的Github上Clone到指定目錄%vimfiles_folder%\bundle\Vundle.vim,這樣尿褪,后面可以直接在Vim中使用Vundle了睦擂。

set vundle_repo=https://github.com/VundleVim/Vundle.vim.git
set vundle_folder=%vimfiles_folder%\bundle\Vundle.vim
if not exist %vundle_folder% (
    git clone %vundle_repo% %vundle_folder% > NUL 2> NUL
    if %ERRORLEVEL% NEQ 0 (
        echo Failed to clone Vundle.vim >&2
        set /A ret=1
        goto :end
    )
)

安裝小工具

我們還需要一些小工具來輔助Vim這個大殺器。一個方便的做法是專門使用一個Github倉庫來保存這些小工具茫多。

Curl

Vundle需要使用curl.exe來進行插件的搜索祈匙,所以我們需要下載curl.exe。我們會將這些需要的小工具提前下載并上傳到一個Github倉庫中天揖,這里call :clone_win_utils會將該倉庫下載到一個臨時目錄中夺欲。另外,需要將可執(zhí)行文件拷貝到Vim的安裝目錄中今膊,Vim才能檢測得到些阅。

if not exist "%vim_folder%\curl.exe" (
    call :clone_win_utils
    if !ERRORLEVEL! NEQ 0 (
        set /A ret=1
        goto :end
    )
    copy /Y %win_utils_folder%\curl.exe "%vim_folder%\" > NUL 2> NUL
    if !ERRORLEVEL! NEQ 0 (
        echo Failed to copy curl.exe, make sure you run this script as Administrator
        set /A ret=1
        goto :end
    )
)

Ag

ag.exe是一個比grep更好用的文件查找工具斑唬,在Windows下開發(fā)更是讓人欲罷不能市埋。另外黎泣,Vim的很多插件也會可以通過使用Ag來進行加速。和Curl類似托呕,我們也是通過提前準備好的倉庫下載該工具项郊,然后拷貝到Vim的目錄。

if not exist "%vim_folder%\ag.exe" (
    call :clone_win_utils
    if !ERRORLEVEL! NEQ 0 (
        set /A ret=1
        goto :end
    )
    copy /Y %win_utils_folder%\ag.exe "%vim_folder%\" > NUL 2> NUL
    if !ERRORLEVEL! NEQ 0 (
        echo Failed to copy ag.exe, make sure you run this script as Administrator
        set /A ret=1
        goto :end
    )
)

Ctags

Ctags就不用多說了拗军,用Vim的都懂任洞!類似的處理方法。

if not exist "%vim_folder%\ctags.exe" (
    call :clone_win_utils
    if !ERRORLEVEL! NEQ 0 (
        set /A ret=1
        goto :end
    )
    copy /Y %win_utils_folder%\ctags.exe "%vim_folder%\" > NUL 2> NUL
    if !ERRORLEVEL! NEQ 0 (
        echo Failed to copy ctags.exe, make sure you run this script as Administrator
        set /A ret=1
        goto :end
    )
)

GNU Global

結合Ctags使用食绿,能夠反向查詢引用侈咕。類似的處理方法。

if not exist "%vim_folder%\gtags.exe" (
    call :clone_win_utils
    if !ERRORLEVEL! NEQ 0 (
        set /A ret=1
        goto :end
    )
    copy /Y %win_utils_folder%\global\ "%vim_folder%\" > NUL 2> NUL
    if !ERRORLEVEL! NEQ 0 (
        echo Failed to copy GNU Global, make sure you run this script as Administrator
        set /A ret=1
        goto :end
    )
)

markdown2ctags.py

這個Python腳本是為了使Tagbar插件支持Markdown語法器紧,從而顯示大綱的耀销,在vimrc中會使用到。

copy /Y markdown2ctags.py %vimfiles_folder%\ > NUL 2> NUL

拷貝vimrc

這個不用解釋了吧铲汪?

set vimrc_file=%USERPROFILE%\_vimrc
copy /Y .vimrc %vimrc_file% > NUL 2> NUL

至此熊尉,啟動GVim,:VundleInstall安裝配置好的插件掌腰,就可以好好享受那熟悉的手指健美操了狰住。

一鍵部署

對于遠程桌面的服務器或者不能聯(lián)網(wǎng)的機器,上面提到的一鍵安裝就顯得不是很適用了齿梁。其實催植,我們可以在已經(jīng)安裝好的機器上训貌,生成一個“綠色”的GVim尝盼,帶上所有的配置和Vim插件怨咪,然后拷貝到別的機器上直接運行即可闯割。win_init.cmd portable會在根目錄下生成一個包含GVim的壓縮包。下面结笨,我們詳細說一下其中的魔法嘱巾。

mkdir %vim_portable_folder% 2> NUL

copy /Y .vimrc %vim_portable_folder%\_vimrc > NUL
set /A portable_ret=!portable_ret!+!ERRORLEVEL!

call :get_file_name "%vim_folder%" vim_exe_folder
xcopy /Y /i "%vim_folder%" "%vim_portable_folder%\!vim_exe_folder!" /s /e > NUL
set /A portable_ret=!portable_ret!+!ERRORLEVEL!

call :get_parent_dir "%vim_folder%" vim_install_folder
xcopy /Y /i "!vim_install_folder!\vimfiles" "%vim_portable_folder%\vimfiles" /s /e > NUL
set /A portable_ret=!portable_ret!+!ERRORLEVEL!

xcopy /Y /i "%vimfiles_folder%" "%vim_portable_folder%\vimfiles" /s /e > NUL
set /A portable_ret=!portable_ret!+!ERRORLEVEL!
  1. 新建一個目錄以存放綠色版的GVim顷歌;
  2. 拷貝vimrc气忠;
  3. 拷貝GVim可執(zhí)行文件所在的目錄(即主程序)邻储;
  4. 拷貝GVim的安裝目錄赋咽;
  5. 拷貝vimfiles目錄,主要是把Vundle安裝好的插件和我們的Detorte配色拷貝上吨娜;

好了脓匿,現(xiàn)在將這個目錄打包好后拷貝到別的機器上就能有一份一模一樣的Vim配置了。

完美主義者

為何不添加一個啟動快捷方式來啟動GVim呢萌壳?

下面的腳本會生成一個init.cmd腳本亦镶。在目的機器上運行該腳本一次日月,就會往系統(tǒng)盤添加一個啟動腳本袱瓮。

(echo @echo off
     echo setlocal EnableExtensions
     echo set dest_gvim=C:\Windows\gvim.bat
     echo if exist "%%dest_gvim%%" EXIT /B 0
     echo set cur_dir=%%~dp0
     echo if /I "%%cur_dir:~-1%%" EQU "\" set cur_dir=%%cur_dir:~0,-1%%
     echo set exe_dir=%%cur_dir%%\!vim_exe_folder!
     echo echo @echo off ^> %%dest_gvim%%
     echo echo start "" "%%exe_dir%%\gvim.exe" %%%%* ^>^> %%dest_gvim%%
     echo pause
    ) >> "%init_cmd%"

結語

從此,Vimer和Vim幸福地生活在一起爱咬!

但是尺借,有一天,Vimer又不開心了精拟,聽說是要寫Markdown筆記燎斩?好吧,出門左轉:Vim與Markdown蜂绎,實現(xiàn)鍵不離手!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末栅表,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子师枣,更是在濱河造成了極大的恐慌怪瓶,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件践美,死亡現(xiàn)場離奇詭異洗贰,居然都是意外死亡,警方通過查閱死者的電腦和手機陨倡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門敛滋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兴革,你說我怎么就攤上這事绎晃。” “怎么了杂曲?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵庶艾,是天一觀的道長。 經(jīng)常有香客問我解阅,道長落竹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任货抄,我火速辦了婚禮述召,結果婚禮上朱转,老公的妹妹穿的比我還像新娘。我一直安慰自己积暖,他們只是感情好藤为,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著夺刑,像睡著了一般缅疟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遍愿,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天存淫,我揣著相機與錄音,去河邊找鬼沼填。 笑死桅咆,一個胖子當著我的面吹牛,可吹牛的內容都是我干的坞笙。 我是一名探鬼主播岩饼,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼薛夜!你這毒婦竟也來了籍茧?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤梯澜,失蹤者是張志新(化名)和其女友劉穎寞冯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腊徙,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡简十,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了撬腾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片螟蝙。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖民傻,靈堂內的尸體忽然破棺而出胰默,到底是詐尸還是另有隱情,我是刑警寧澤漓踢,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布牵署,位于F島的核電站,受9級特大地震影響喧半,放射性物質發(fā)生泄漏奴迅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一挺据、第九天 我趴在偏房一處隱蔽的房頂上張望取具。 院中可真熱鬧脖隶,春花似錦、人聲如沸暇检。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽块仆。三九已至构蹬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悔据,已是汗流浹背庄敛。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蜜暑,地道東北人铐姚。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像肛捍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子之众,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內容