每個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!
- 新建一個目錄以存放綠色版的GVim顷歌;
- 拷貝vimrc气忠;
- 拷貝GVim可執(zhí)行文件所在的目錄(即主程序)邻储;
- 拷貝GVim的安裝目錄赋咽;
- 拷貝
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)鍵不離手!