使用 VIM 切换系统 hosts
2012-08-29
作为一名互联网工程师,日常工作中经常需要切换各种 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
最后,选择一个目录,比如“~/tools/SwitchHosts/hosts”,将各种 hosts 方案文件放进来,每个文件一个方案,然后在管理员权限下(sudo)用 Vim 打开这个目录,按 F7,各种 hosts 方案就都在右侧菜单里列出来了。如下图:
一些快捷键:
- Ctrl + N :切换到下一个 hosts 方案
- Ctrl + P :切换到上一个 hosts 方案
- Ctrl + H :应用当前 hosts 方案
- F7 :开启/关闭 hosts 方案列表
你可以修改配置文件,添加更多的功能。也可以在 ~/bin 目录下加一个文件,内容形如 sudo mvim ~/tools/SwitchHosts/hosts
,这样就能使用命令行快速打开 hosts 文件目录并进行方案修改或切换。
就这样,在古老的 Vim 的帮助下,又一个问题被快速解决了。Vim 的确是程序员的利器啊!
发表评论:
电子邮件地址不会被公开。必填项已用 * 标注。
评论:
经常用的是http://www.sharewarestudio.com/的DnsSpeeder,不过这东西经常的读路由器里的DNS设定,只好把路由器的DNS也改了。
别忘了,切换完文件后,mac osx需要dscacheutil -flushcache,才能生效!
vim只要装个comment插件就好了
这一段全注释,这一段全生效,host switching done!
有道理!:-D