使用VIM切换系统hosts

作为一名互联网工程师,日常工作中经常需要切换各种 hosts 绑定,为了让这个工作更容易一些,去年我写了一个小工具 SwitchHosts!。这个工具在 Windows 下表现良好,Linux 下也马马虎虎,但在 Mac 下就比较丑陋了,而且我一直没能搞定 wxPython 在 Mac 下的编译,因此这个程序一直没有 Mac 版。

最近一段时间,我也开始将日常工作环境搬到 Mac 上来,迫切需要一个方便切换 hosts 绑定的工具,但一直没有找到合适的。终于,在再一次搞不定 Mac 版的 SwitchHosts! 之后,我想到了万能的 Vim,一下子豁然开朗,很快就弄出了这个基于 Vim 的 hosts 切换方案。

首先,你的机子上需要安装了 Vim,如果用的是 Mac 系统,可以安装 MacVim。接着,为了能够显示 hosts 文件列表,需要安装 NERD tree 插件。然后,在你的 vim 配置中加入以下内容:


" NERD tree
" http://www.vim.org/scripts/script.php?script_id=1658
let NERDChristmasTree = 1
let NERDTreeIgnore = [".*.pyc",".*.swp",".*.png",".*.gif",".*.jpg",".*.ico","tags"]
let NERDTreeAutoCenter = 1
let NERDTreeShowFiles = 1 " 是否默认显示文件
" let NERDTreeShowHidden = 1 " 是否默认显示隐藏文件
let NERDTreeWinPos = "right"
let NERDTreeWinSize = s:PlugWinSize
let NERDTreeChDirMode = 2
" nmap <leader>n :NERDTreeToggle<CR>
"nmap <leader>n :call OnNERDTreeToggle()<CR>
let g:is_NERDTreeOpen = 0
function! OnNERDTreeToggle()
	if g:is_NERDTreeOpen == 0
		let g:is_NERDTreeOpen = 1
		" NERD Tree 打开的情况下,按 Ctrl + N 打开下一个文件
		" Ctrl + P 打开上一个文件
		map <C-N> <ESC><C-W>ljo
		map <C-P> <ESC><C-W>lko
	else
		let g:is_NERDTreeOpen = 0
		unmap <C-N>
		unmap <C-P>
	endif
	silent execute "NERDTreeToggle"
	" echo "isOPEN: " . g:is_NERDTreeOpen
endfunction

" 按 F7 调出文件列表菜单
map <F7> :call OnNERDTreeToggle()<CR>
imap <F7> <ESC>:call OnNERDTreeToggle()<CR>

" 切换hosts文件
map <C-H> :w! /etc/hosts<CR>
imap <C-H> <ESC>:w! /etc/hosts<CR>i

最后,选择一个目录,比如“~/EverBox/tools/SwitchHosts/hosts”,将各种 hosts 方案文件放进来,每个文件一个方案,然后在管理员权限下(sudo)用 Vim 打开这个目录,按 F7,各种 hosts 方案就都在右侧菜单里列出来了。如下图:

一些快捷键:

Ctrl + N :切换到下一个 hosts 方案
Ctrl + P :切换到上一个 hosts 方案
Ctrl + H :应用当前 hosts 方案
F7 :开启/关闭 hosts 方案列表

你可以修改配置文件,添加更多的功能。也可以在 ~/bin 目录下加一个文件,内容形如“sudo mvim ~/EverBox/tools/SwitchHosts/hosts”,这样就能使用命令行快速打开 hosts 文件目录并进行方案修改或切换。

就这样,在古老的 Vim 的帮助下,又一个问题被快速解决了。Vim 的确是程序员的利器啊!

4 Replies to “使用VIM切换系统hosts”

  1. 经常用的是http://www.sharewarestudio.com/的DnsSpeeder,不过这东西经常的读路由器里的DNS设定,只好把路由器的DNS也改了。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s