<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tony Bai &#187; SublimeText2</title>
	<atom:link href="http://tonybai.com/tag/sublimetext2/feed/" rel="self" type="application/rss+xml" />
	<link>https://tonybai.com</link>
	<description>一个程序员的心路历程</description>
	<lastBuildDate>Mon, 08 Jun 2026 23:32:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>使用Visual Studio Code辅助Go源码编写</title>
		<link>https://tonybai.com/2016/12/23/write-go-code-in-vscode/</link>
		<comments>https://tonybai.com/2016/12/23/write-go-code-in-vscode/#comments</comments>
		<pubDate>Fri, 23 Dec 2016 10:36:06 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[atom]]></category>
		<category><![CDATA[borland]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[gocode]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[locale]]></category>
		<category><![CDATA[macos]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[monokai]]></category>
		<category><![CDATA[snippets]]></category>
		<category><![CDATA[SublimeText2]]></category>
		<category><![CDATA[sublimetext3]]></category>
		<category><![CDATA[turboc]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[VB]]></category>
		<category><![CDATA[vc]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[vim-go]]></category>
		<category><![CDATA[visualstudio]]></category>
		<category><![CDATA[vscode]]></category>
		<category><![CDATA[vscode-go]]></category>
		<category><![CDATA[vscodevim]]></category>
		<category><![CDATA[VSIX]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[微软]]></category>

		<guid isPermaLink="false">http://tonybai.com/?p=2096</guid>
		<description><![CDATA[作为VIMer，日常编码中，Vim编辑器依然是我的首选。以前以C语言为主要语言的时候是这样，现在以Go为主要语言时亦是这样。不过近期发现Mac上使用Vim在编写Go代码时，Vim时不时的“抽风”：出现一些“屏幕字符被篡改”的问题，比如下面这幅图中”func”变成了”fknc”: 虽然一段时间后，显示会自动更正过来，但这种“篡改”是会让你产生“幻觉”的。你会想：是不是我真的将”func”写成”fknc”了呢？久而久之，这个瑕疵将会影响你的编码效率。至于为何会出现这个问题，初步怀疑可能是因为vim加载较多插件导致的一些性能问题，我在安装了Ubuntu 16.04的台式机上至今还没发现这个问题（相同的.vimrc配置）。 于是，我打算找一款辅助编辑器，用于在被上面这个问题折磨得开始“厌恶”Vim的某些时候，切换一下，平复一下心情^0^。我看中了Microsoft开源的Visual Studio Code，简称：VSCode。 一、与Microsoft的Visual Studio的渊源 Microsoft做IDE还是很专业的，也是很认真的。大学那时候学C，嫌弃Turbo C太简陋，基本上都是在D版Visual Studio 6.0上完成各种作业和小程序的制作的。后来在2001年微软发布了.net战略，发布了C#语言，同时也发布了Visual Studio .NET IDE。估计我也算是国内第一批使用到Visual Studio.NET IDE的人吧，那时候微软俱乐部在校园里免费发送Vs.net beta版光盘，我拿到了一份，并第一时间体验了vs.net。Visual Studio .NET与之前的VS 6.0有着天壤之别，功能强大，界面也做了重新设计，支持微软的各种语言，包括C#、C/C++(包括managed c++)、VB、ASP.net等，并在一年后的正式版发布后，逐渐在桌面应用程序开发中成为霸主，把那个时候在IDE领域的竞争对手Borland公司彻底打垮。但Visual Studio从此也变得更加庞大和臃肿，安装一个VS，没有几个G空间是不行的。想想那个时候机器的配置，跑个VS.net还真是心有而力不足。 工作之后，进入服务端编程领域，结识了Unix、Linux以及Vim、GCC，就再也没怎么碰过Visual Studio。随着工作OS也从Windows切换到Ubuntu，基本就和VS绝缘了。之后随着Java语言成为企业级应用的主角、Web时代的到来以及开源IDE（比如：Eclipse）的兴起，微软的Visual Studio不再那么耀眼，或者说是人们对于IDE的关注并不像开发GUI程序那个年代那么强烈了。但鉴于微软自身产品体系的庞大，VS始终在市场中占有一席之地。 而近些年，一些跨平台、轻量级、插件结构、支持智能感知、可随意定制的文本编辑器的出现，比如：Sublime Text、Atom等让开发人员喜不自禁。这些编辑器并非定位于IDE，但功能又不输给IDE很多，尤其在支持编码、调试这些环节，它们完全可以与专业IDE媲美，但资源消耗却是像Visual Studio、Eclipse这样大而全的IDE所无法匹敌的。而Visual Studio Code恰是微软在这方面的一个尝试，也是微软最新公司战略的体现之一：拥抱所有开发者（不仅仅是Windows上的哦）。 二、VSCode安装 VSCode发布于2015年4月的Build大会上。发布后，迅速得到开发者响应，大家普遍反映：VSCode性能不错、关注细节、体验良好，虽然当时VSCode的插件还不算丰富。一年多过去后，VSCode已经演化到了1.8.1版本（截至2016年12月末），支持所有主流编程语言的开发，配套的插件也十分丰富了。VSCode的安装简单的很，这一向都是微软的强项，你可以在其官方站上下载到各个平台的安装包（Linux平台也有.deb/.rpm两种包格式供选择，并提供32bit和64bit两种版本）。下载后安装即可。 1、VSCode配置和数据存储路径 VSCode安装后，一般不必关心其配置和数据存储路径的位置。但作为有一些Geek精神的developer来说，弄清楚其安装和配置的来龙去脉还是很有意义的。 在Mac上： VSCode存储运行数据和配置文件的目录在：~/Library/Application Support/Code下： ~/Library/Application Support/Code]$ls Backups/ CachedData/ Cookies-journal Local Storage/ User/ Cache/ Cookies GPUCache/ Preferences storage.json $ls User keybindings.json locale.json [...]]]></description>
			<content:encoded><![CDATA[<p>作为<a href="http://tonybai.com/tag/vim">VIMer</a>，日常编码中，<a href="http://www.vim.org/">Vim</a>编辑器依然是我的首选。以前以<a href="http://tonybai.com/tag/c">C语言</a>为主要语言的时候是这样，现在以<a href="http://tonybai.com/tag/go">Go</a>为主要语言时亦是这样。不过近期发现Mac上<a href="http://tonybai.com/2014/11/07/golang-development-environment-for-vim">使用Vim在编写Go代码</a>时，Vim时不时的“抽风”：出现一些“屏幕字符被篡改”的问题，比如下面这幅图中”func”变成了”fknc”:</p>
<p><img src="http://tonybai.com/wp-content/uploads/vim-go-flaw.png" alt="" /></p>
<p>虽然一段时间后，显示会自动更正过来，但这种“篡改”是会让你产生“幻觉”的。你会想：是不是我真的将”func”写成”fknc”了呢？久而久之，这个瑕疵将会影响你的编码效率。至于为何会出现这个问题，初步怀疑可能是因为vim加载较多插件导致的一些性能问题，我在安装了<a href="http://tonybai.com/tag/ubuntu">Ubuntu 16.04</a>的台式机上至今还没发现这个问题（相同的.vimrc配置）。</p>
<p>于是，我打算找一款辅助编辑器，用于在被上面这个问题折磨得开始“厌恶”Vim的某些时候，切换一下，平复一下心情^0^。我看中了Microsoft开源的<a href="https://code.visualstudio.com/">Visual Studio Code</a>，简称：VSCode。</p>
<h3>一、与Microsoft的Visual Studio的渊源</h3>
<p>Microsoft做IDE还是很专业的，也是很认真的。大学那时候学C，嫌弃<a href="https://en.wikipedia.org/wiki/Borland_Turbo_C">Turbo C</a>太简陋，基本上都是在D版Visual Studio 6.0上完成各种作业和小程序的制作的。后来在2001年微软发布了.net战略，发布了<a href="https://en.wikipedia.org/wiki/C_Sharp_%28programming_language%29">C#语言</a>，同时也发布了Visual Studio .NET IDE。估计我也算是国内第一批使用到Visual Studio.NET IDE的人吧，那时候微软俱乐部在校园里免费发送Vs.net beta版光盘，我拿到了一份，并第一时间体验了vs.net。Visual Studio .NET与之前的VS 6.0有着天壤之别，功能强大，界面也做了重新设计，支持微软的各种语言，包括C#、C/C++(包括managed c++)、VB、ASP.net等，并在一年后的正式版发布后，逐渐在桌面应用程序开发中成为霸主，把那个时候在IDE领域的竞争对手<a href="https://en.wikipedia.org/wiki/Borland">Borland公司</a>彻底打垮。但<a href="https://www.visualstudio.com">Visual Studio</a>从此也变得更加庞大和臃肿，安装一个VS，没有几个G空间是不行的。想想那个时候机器的配置，跑个VS.net还真是心有而力不足。</p>
<p>工作之后，进入服务端编程领域，结识了Unix、Linux以及<a href="http://tonybai.com/tag/vim">Vim</a>、<a href="http://tonybai.com/tag/gcc">GCC</a>，就再也没怎么碰过Visual Studio。随着工作OS也<a href="http://tonybai.com/2010/08/25/move-to-ubuntu-thoroughly/">从Windows切换到Ubuntu</a>，基本就和VS绝缘了。之后随着Java语言成为企业级应用的主角、Web时代的到来以及开源IDE（比如：Eclipse）的兴起，微软的Visual Studio不再那么耀眼，或者说是人们对于IDE的关注并不像开发GUI程序那个年代那么强烈了。但鉴于微软自身产品体系的庞大，VS始终在市场中占有一席之地。</p>
<p>而近些年，一些跨平台、轻量级、插件结构、支持智能感知、可随意定制的文本编辑器的出现，比如：<a href="http://www.sublimetext.com/">Sublime Text</a>、<a href="https://atom.io/">Atom</a>等让开发人员喜不自禁。这些编辑器并非定位于IDE，但功能又不输给IDE很多，尤其在支持编码、调试这些环节，它们完全可以与专业IDE媲美，但资源消耗却是像Visual Studio、<a href="http://www.eclipse.org/">Eclipse</a>这样大而全的IDE所无法匹敌的。而Visual Studio Code恰是微软在这方面的一个尝试，也是微软最新公司战略的体现之一：拥抱所有开发者（不仅仅是Windows上的哦）。</p>
<h3>二、VSCode安装</h3>
<p><a href="https://code.visualstudio.com/">VSCode</a>发布于2015年4月的Build大会上。发布后，迅速得到开发者响应，大家普遍反映：VSCode性能不错、关注细节、体验良好，虽然当时VSCode的插件还不算丰富。一年多过去后，VSCode已经演化到了1.8.1版本（截至2016年12月末），支持所有主流编程语言的开发，配套的插件也十分丰富了。VSCode的安装简单的很，这一向都是微软的强项，你可以在其官方站上下载到各个平台的安装包（Linux平台也有.deb/.rpm两种包格式供选择，并提供32bit和64bit两种版本）。下载后安装即可。</p>
<h4>1、VSCode配置和数据存储路径</h4>
<p>VSCode安装后，一般不必关心其配置和数据存储路径的位置。但作为有一些Geek精神的developer来说，弄清楚其安装和配置的来龙去脉还是很有意义的。</p>
<p>在Mac上：</p>
<p>VSCode存储运行数据和配置文件的目录在：~/Library/Application Support/Code下：</p>
<pre><code> ~/Library/Application Support/Code]$ls
Backups/        CachedData/        Cookies-journal        Local Storage/        User/
Cache/            Cookies            GPUCache/        Preferences        storage.json

$ls User
keybindings.json    locale.json        settings.json        snippets/        workspaceStorage/
</code></pre>
<p>在Ubuntu中：</p>
<p>VSCode存储运行数据和配置文件的目录在~/.config/Code下面：</p>
<pre><code>~/.config/Code$ ls
Backups  Cache  CachedData  Cookies  Cookies-journal  GPUCache  Local Storage  storage.json  User

</code></pre>
<p>至于Windows平台，请自行探索^_^。</p>
<h4>2、启动方式</h4>
<p>VSCode有两种启动方式：桌面启动和命令行启动。桌面启动自不必说了。命令行启动的示例如下：</p>
<pre><code>$ code main.go
</code></pre>
<p>code命令会打开一个VSCode窗口并加载命令参数中的文件内容，这里是main.go。</p>
<h3>三、VSCode的配置</h3>
<p>一般来说，VSCode启动即可用了。但要想发挥出VSCode的能量，我们必须对其进行一番配置。VSCode的配置有几十上百项，这里无法全覆盖，仅说明一下我个人比较关注的。</p>
<h4>1、安装插件</h4>
<p>像VSCode这种小清新文本编辑器要想对编程语言有很好的支持，必须安装相应语言的插件。以Go为例，我们至少要安装<a href="https://github.com/Microsoft/vscode-go">vscode-go</a>插件。vscode-go之于VSCode，就好比<a href="http://tonybai.com/2016/09/08/upgrade-vim-go">vim-go</a>之于VIM。并且和<a href="https://github.com/fatih/vim-go">vim-go</a>类似，vscode-go实现的各种Features也是依赖诸多已存在的Go周边工具，包括：</p>
<pre><code>gocode: go get -u -v github.com/nsf/gocode
godef: go get -u -v github.com/rogpeppe/godef
gogetdoc: go get -u -v github.com/zmb3/gogetdoc
golint: go get -u -v github.com/golang/lint/golint
go-outline: go get -u -v github.com/lukehoban/go-outline
goreturns: go get -u -v sourcegraph.com/sqs/goreturns
gorename: go get -u -v golang.org/x/tools/cmd/gorename
gopkgs: go get -u -v github.com/tpng/gopkgs
go-symbols: go get -u -v github.com/newhook/go-symbols
guru: go get -u -v golang.org/x/tools/cmd/guru
gotests: go get -u -v github.com/cweill/gotests/...
</code></pre>
<p>因此，要想实现vscode-go官网页面中demo中哪些神奇的Feature，你必须将上面的这些依赖工具逐一安装成功。如果缺少一个依赖工具，VSCode会在窗口右下角的状态栏里显示：“Analysis Tools Missing”字样，以提示你安装这些工具。</p>
<p>VSCode当然也支持Vim-mode的编辑模式，如果你也和我一样，喜欢用vim-mode在VSCode中进行编辑，可以安装<a href="https://github.com/VSCodeVim/Vim">VSCodeVim插件</a>。</p>
<p>VSCode的插件安装方式分为两种：在线安装和VSIX方式安装。</p>
<p>在线安装，顾名思义，即在VSCode的窗口左侧边栏中点击“Extensions”按钮，在打开的Extensions搜索框中搜索你想要的插件名称，或者选择预制的条件获得插件信息。选中你要安装的插件，点击“Install”按钮即可完成安装。</p>
<p>VSIX安装：即到插件官网将插件文件下载到本地（插件安装文件一般以.vsix或.zip结尾），在窗口中选择：”Install from VSIX&#8230;”，选择你下载的插件文件即可。</p>
<p>安装后的插件都被放在~/.vscode/extensions目录下(mac和linux)。</p>
<h4>2、更改语言设置</h4>
<p>VSCode在初次启动时会判断当前系统语言，并以相应的语言作为默认窗口显示语言。比如：我的是中文OS X系统，那么默认VSCode的窗口文字都是中文。如果我要将其改为英文，应该如何操作呢？</p>
<p>F1登场！这里的F1可不是赛车比赛，而是快捷键F1，估计也是整个VSCode最常用的快捷键之一了。敲击F1后，VSCode会显示其“Command Palette”输入框，这里面包含了当前VSCode可以执行的所有操作命令，支持Search。我们输入”language”，在搜索结果中选择“Configure Language”，VSCode打开一个新的编辑窗口，加载~/Library/Application Support/Code/User/locale.json文件：</p>
<pre><code>{
    // 定义 VSCode 的显示语言。
    // 请参阅 https://go.microsoft.com/fwlink/?LinkId=761051，了解支持的语言列表。
    // 要更改值需要重启 VSCode。
    "locale": "zh-cn"
}
</code></pre>
<p>当前语言为中文，如果我们要将其改为英文，则修改该文件中的”locale”项：</p>
<pre><code>{
    // 定义 VSCode 的显示语言。
    // 请参阅 https://go.microsoft.com/fwlink/?LinkId=761051，了解支持的语言列表。
    // 要更改值需要重启 VSCode。
    "locale": "en-US"
}
</code></pre>
<p>保存，重启VSCode。再次启动的VSCode将会以英文界面示人了。</p>
<h4>3、User Settings和Workspace Settings</h4>
<p>UserSettings是一种“全局”设置，而Workspace Settings则顾名思义，是一种针对一个特定目录或project的设置。</p>
<p>UserSettings设置后的数据保存在~/Library/Application Support/Code下(以mac为例)，而Workspace Setting设置后的数据则保存在某个项目特定目录下的.vscode目录下。</p>
<p>在菜单栏，选择【Preferences -> User Settings】可以打开~/Library/Application Support/Code/User/settings.json文件。默认情况下，该文件为空。VSCode采用默认设置。如果你要个性化设置，那么可将对应的配置项copy一份到settings.json中，并赋予其新值，保存即可。新值将覆盖默认值。以字体大小为例，我们将默认的editor.fontSize 12改为10：</p>
<pre><code>// Place your settings in this file to overwrite the default settings
{
    "editor.fontSize": 10,
}
</code></pre>
<p>保存后，可以看到窗口中所有文字的Size都变小了。</p>
<p>在菜单栏，选择【Preferences -> Workspace Settings】可打开当前工作目录下的.vscode的settings.json文件，其工作原理和配置方法与User Settings一样，只是生效范围仅限于该工作区范畴。</p>
<h4>4、Color Theme</h4>
<p>VSCode内置了主流的配色方案，比如：monokai、solarized dark/light等。F1，输入”color”搜索，选择：“Perefences: Color Theme”（在MAC上也可以用cmd+k, cmd+t打开），在下拉列表中选择你喜欢的配色Theme即可，即可生效。</p>
<h3>四、vscode-go的使用</h3>
<p>前面说过，和vim-go一样，vscode-go插件实现了Go编码中需要的各种功能：自动format、自动增删import、build on save、lint on save、定义跳转、原型信息快速提示、自动补全、code snippets等。另外它通过带颜色的波浪线提示代码问题（虽然有时候反应有点慢），包括语法问题、不符合idiomatic go规则的问题（比如appId这个命名，它会建议你改为appID）等。</p>
<p>code snippets非常好用，内置的code snippets在~/.vscode/extensions/lukehoban.Go-0.6.51/snippets/go.json中可以找到，类似这样的定义：</p>
<pre><code>//~/.vscode/extensions/lukehoban.Go-0.6.51/snippets/go.json
{
        ".source.go": {
                "single import": {
                        "prefix": "im",
                        "body": "import \"${1:package}\""
                },
                "multiple imports": {
                        "prefix": "ims",
                        "body": "import (\n\t\"${1:package}\"\n)"
                },
                "single constant": {
                        "prefix": "co",
                        "body": "const ${1:name} = ${2:value}"
                },
                "multiple constants": {
                        "prefix": "cos",
                        "body": "const (\n\t${1:name} = ${2:value}\n)"
                },
                "type interface declaration": {
                        "prefix": "tyi",
                        "body": "type ${1:name} interface {\n\t$0\n}"
                },
                "type struct declaration": {
                        "prefix": "tys",
                        "body": "type ${1:name} struct {\n\t$0\n}"
                },
                "package main and main function": {
                        "prefix": "pkgm",
                        "body": "package main\n\nfunc main() {\n\t$0\n}"
                },
... ...

</code></pre>
<p>敲入”prefix”的值，比如”ims”，输入tab，vscode-go将为你展开为：</p>
<pre><code>import (
    "package"
)
</code></pre>
<p>在使用vscode时遇到过一次代码自动补全“失灵”的问题。vscode-go只会提示：”PANIC,PANIC,PANIC”。经查，这个是<a href="https://github.com/nsf/gocode">gocode</a> daemon的问题，我的解决方法是：</p>
<pre><code>gocode close //关闭gocode daemon
gocode -s &amp;  //重启之。
</code></pre>
<h3>五、小结</h3>
<p>在诸多轻量级编辑器中，我还是比较看好vscode的，毕竟其背后有着Microsoft积淀多年的IDE产品开发经验。并且和Microsoft以往产品最大的不同就是其是开源项目。</p>
<p>关于Vscode的使用和奇技淫巧可以参见其官方的这篇文档“<a href="https://github.com/Microsoft/vscode-tips-and-tricks/blob/master/README.md">VS Code Tips and Tricks</a>”。</p>
<p>关于Vscode的各种周边工具和资料列表，请参考<a href="https://github.com/viatsko/awesome-vscode">Awesome-vscode项目</a>。</p>
<p>快捷键往往是开发人员的最爱，VSCode官方制作了三个平台的VSCode的快捷键worksheet：</p>
<p>https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf</p>
<p>https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf</p>
<p>https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf</p>
<p>VSCode还在快速发展，离完善还有不小提升空间。比如：在使用过程中也发现了VSCode 窗口无响应或代码编辑错乱之情况。不过作为Go编码的一个辅助编辑器，VSCode还是完全胜任和超出预期的。</p>
<p style='text-align:left'>&copy; 2016, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2016/12/23/write-go-code-in-vscode/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Golang开发环境搭建-Vim篇</title>
		<link>https://tonybai.com/2014/11/07/golang-development-environment-for-vim/</link>
		<comments>https://tonybai.com/2014/11/07/golang-development-environment-for-vim/#comments</comments>
		<pubDate>Fri, 07 Nov 2014 13:36:02 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[Editor]]></category>
		<category><![CDATA[errcheck]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[go.tools]]></category>
		<category><![CDATA[gocode]]></category>
		<category><![CDATA[godef]]></category>
		<category><![CDATA[goimports]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[golint]]></category>
		<category><![CDATA[gorename]]></category>
		<category><![CDATA[gosublime]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[MacOSX]]></category>
		<category><![CDATA[MacVim]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[MolokaiTheme]]></category>
		<category><![CDATA[neocomplete]]></category>
		<category><![CDATA[neosnippet]]></category>
		<category><![CDATA[pathogen]]></category>
		<category><![CDATA[SublimeText2]]></category>
		<category><![CDATA[sublimetext3]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[ultisnips]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[vim-go]]></category>
		<category><![CDATA[vimrc]]></category>
		<category><![CDATA[Vundle]]></category>
		<category><![CDATA[YCM]]></category>
		<category><![CDATA[代码补齐]]></category>
		<category><![CDATA[编辑器]]></category>
		<category><![CDATA[语法高亮]]></category>

		<guid isPermaLink="false">http://tonybai.com/?p=1613</guid>
		<description><![CDATA[虽说sublimetext3+gosublime+gocode是目前较为 流行的Golang开发环境组合，但作为一名VIMer，没有一套得心应手的Vim for Golang dev心里总是过不去的。Golang虽然年轻，但即便是从Go 1版本发布(2012年3月28日)算起，掐指算来也有小三年了。全世界的开发者已经为Golang贡献了较为成熟的Vim插件了。有了这些插件，搭建出 一套高效的Golang开发环境还是不难的，网上也有大量的资料可以参考，其中就有vim-go作者自己发表的一篇文章《Go development environment for Vim》。不过看别人 写的与自己搭建体验的还是有大不同的，于是想来想去还是把整个过程记录下来。 一、一个干净的环境 找个干净的基础环境，方便确认每个搭建步骤后的效果： Ubuntu 14.04 x86_64 vim version 7.4.52 go version go1.4beta1 linux/amd64 再准备一个编辑Go源码的测试源文件： //hellogolang.go package main import &#34;fmt&#34; func main() { &#160;&#160;&#160;&#160;&#160;&#160;&#160; fmt.Println(&#34;Hello Golang!&#34;) } 用于验证每个搭建步骤后的变化。 二、严格按照vim-go的官方说明逐一搭建 Vim-go是当前使用最为广泛的用于搭建Golang开发环境的vim插件，这里我同样使用vim-go作为核心和基础进行环境搭建的。vim-go利 用开源Vim插件管理器安装，gmarik/Vundle.vim是目前被推荐次数更多的Vim插件管理器，超过了pathogen。这里我们 就用vundle来作为Vim的插件管理工具。 1、安装Vundle.vim Vundle.vim的安装步骤如下： mkdir ~/.vim/bundle git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 创建~/.vimrc文件(如果你没有这个文件的话)，在文件顶部添加有关Vundle.vim的配置： set nocompatible&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#34; [...]]]></description>
			<content:encoded><![CDATA[<p>虽说<font face="Courier New"><a href="http://www.sublimetext.com/3">sublimetext3</a>+<a href="https://github.com/DisposaBoy/GoSublime">gosublime</a>+<a href="https://github.com/nsf/gocode">gocode</a></font>是目前较为 流行的<a href="http://tonybai.com/tag/go">Golang</a>开发环境组合，但作为一名VIMer，没有一套得心应手的<a href="http://www.vim.org/">Vim</a> for Golang dev心里总是过不去的。Golang虽然年轻，但即便是从<a href="http://tonybai.com/2014/10/25/golang-history/">Go 1版本发布</a>(2012年3月28日)算起，掐指算来也有小三年了。全世界的开发者已经为Golang贡献了较为成熟的Vim插件了。有了这些插件，搭建出 一套高效的Golang开发环境还是不难的，网上也有大量的资料可以参考，其中就有<a href="https://github.com/fatih/vim-go">vim-go</a>作者自己发表的一篇文章《<a href="http://blog.gopheracademy.com/vimgo-development-environment/">Go development environment for Vim</a>》。不过看别人 写的与自己搭建体验的还是有大不同的，于是想来想去还是把整个过程记录下来。</p>
<p><b>一、一个干净的环境</b></p>
<p>找个干净的基础环境，方便确认每个搭建步骤后的效果：</p>
<p><font face="Courier New"><a href="http://tonybai.com/2014/09/26/install-docker-on-ubuntu-server-1404/">Ubuntu 14.04</a> x86_64<br />
	vim version 7.4.52<br />
	go version go1.4beta1 linux/amd64</font></p>
<p>再准备一个编辑Go源码的测试源文件：</p>
<p><font face="Courier New">//hellogolang.go</font></p>
<p><font face="Courier New">package main</font></p>
<p><font face="Courier New">import &quot;fmt&quot;</font></p>
<p><font face="Courier New">func main() {<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fmt.Println(&quot;Hello Golang!&quot;)<br />
	}</font></p>
<p>用于验证每个搭建步骤后的变化。</p>
<p><b>二、严格按照vim-go的官方说明逐一搭建</b></p>
<p>Vim-go是当前使用最为广泛的用于搭建Golang开发环境的vim插件，这里我同样使用vim-go作为核心和基础进行环境搭建的。vim-go利 用开源Vim插件管理器安装，<a href="https://github.com/gmarik/Vundle.vim">gmarik/Vundle.vim</a>是目前被推荐次数更多的Vim插件管理器，超过了<a href="http://www.vim.org/scripts/script.php?script_id=2332">pathogen</a>。这里我们 就用vundle来作为Vim的插件管理工具。</p>
<p><b>1、安装Vundle.vim</b></p>
<p>Vundle.vim的安装步骤如下：</p>
<p><font face="Courier New">mkdir ~/.vim/bundle<br />
	git clone <a class="moz-txt-link-freetext" href="https://github.com/gmarik/Vundle.vim.git">https://github.com/gmarik/Vundle.vim.git</a> ~/.vim/bundle/Vundle.vim&nbsp;&nbsp;&nbsp;</font> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>创建<font face="Courier New">~/.vimrc</font>文件(如果你没有这个文件的话)，在文件顶部添加有关Vundle.vim的配置：</p>
<p><font face="Courier New">set nocompatible&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot; be iMproved, required<br />
	filetype off&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot; required</font></p>
<p><font face="Courier New">&quot; set the runtime path to include Vundle and initialize<br />
	set rtp+=~/.vim/bundle/Vundle.vim<br />
	call vundle#begin()</font></p>
<p><font face="Courier New">&quot; let Vundle manage Vundle, required<br />
	Plugin &#39;gmarik/Vundle.vim&#39;</font></p>
<p><font face="Courier New">&quot; All of your Plugins must be added before the following line<br />
	call vundle#end()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot; required<br />
	filetype plugin indent on&nbsp;&nbsp;&nbsp; &quot; required</font></p>
<p>此时Vim仅安装了Vundle.vim这一个插件。编辑hellogolang.go时与编辑普通文本文件无异，一切都还是Vim的默认属性。</p>
<p><b>2、安装Vim-go</b></p>
<p>编辑<font face="Courier New">~/.vimrc</font>，在<font face="Courier New">vundle#begin</font>和<font face="Courier New">vundle#end</font>间增加一行：</p>
<p><font face="Courier New">Plugin &#39;fatih/vim-go&#39;</font></p>
<p>在Vim内执行<font face="Courier New"> <img src='https://tonybai.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> luginInstall</font>，</p>
<p>Vundle.vim会在左侧打开一个Vundle Installer Preview子窗口，窗口下方会提示：<font face="Courier New">&ldquo;Processing &#39;fatih/vim-go&#39;&rdquo;</font>，待安装完毕后，提示信息变 成&ldquo;<font face="Courier New">Done!&rdquo;。</font></p>
<p><font face="Courier New">这时，我们可以看到.vim/bundle下多了一个vim-go文件夹：</font></p>
<p><font face="Courier New">$ ls .vim/bundle/<br />
	vim-go/&nbsp; Vundle.vim/</font></p>
<p>此时，再次编辑hellogolang.go，<u><b>语法高亮</b></u>有了， <u><b>保存时自动format</b></u>（利用$GOBIN/gofmt）也有了，但其他高级功能，比如自动import缺失的 package、自动补齐仍然没有，我们还要继续安装一些东东。</p>
<p><b>3、安装go.tools Binaries</b></p>
<p>vim-go安装说明中提到所有必要的binary需要先安装好，比如gocode、godef、goimports等。</p>
<p>通过<font face="Courier New">:GoInstallBinaries</font>，这些vim-go依赖的二进制工具将会自动被下载，并被安装到<font face="Courier New">$GOBIN</font>下或<font face="Courier New">$GOPATH/bin</font>下。（这个工具需要依赖git或hg，需要提前安装到你的OS中。）</p>
<p><font face="Courier New">:GoInstallBinaries</font>的执行是交互式的，你需要回车确认：</p>
<p><font face="Courier New">vim-go: gocode not found. Installing github.com/nsf/gocode to folder /home/tonybai/go/bin<br />
	vim-go: goimports not found. Installing code.google.com/p/go.tools/cmd/goimports to folder /home/tonybai/go/bin/<br />
	vim-go: godef not found. Installing code.google.com/p/rog-go/exp/cmd/godef to folder /home/tonybai/go/bin/<br />
	vim-go: oracle not found. Installing code.google.com/p/go.tools/cmd/oracle to folder /home/tonybai/go/bin/<br />
	vim-go: gorename not found. Installing code.google.com/p/go.tools/cmd/gorename to folder /home/tonybai/go/bin/<br />
	vim-go: golint not found. Installing github.com/golang/lint/golint to folder /home/tonybai/go/bin/</font><br />
	<font face="Courier New">vim-go: errcheck not found. Installing github.com/kisielk/errcheck to folder /home/tonybai/go/bin/</font></p>
<p>不过这些代码多在code.google.com上托管，因此由于众所周知的原因，vim-go的自动安装很可能以失败告终，这样就需要你根据上 面日志中提到的各个工具的源码地址逐一去下载并本地安装。无法搭梯子的，可以通过http://gopm.io 下载相关包。</p>
<p>安装后，$GOBIN下的新增Binaries如下：<br />
	<font face="Courier New">-rwxr-xr-x&nbsp; 1 tonybai tonybai&nbsp; 5735552 11??&nbsp; 7 11:03 errcheck*<br />
	-rwxr-xr-x&nbsp; 1 tonybai tonybai&nbsp; 9951008 11??&nbsp; 7 10:33 gocode*<br />
	-rwxr-xr-x&nbsp; 1 tonybai tonybai&nbsp; 5742800 11??&nbsp; 7 11:07 godef*<br />
	-rwxr-xr-x&nbsp; 1 tonybai tonybai&nbsp; 4994120 11??&nbsp; 7 11:00 goimports*<br />
	-rwxr-xr-x&nbsp; 1 tonybai tonybai&nbsp; 5750152 11??&nbsp; 7 11:03 golint*<br />
	-rwxr-xr-x&nbsp; 1 tonybai tonybai&nbsp; 6381832 11??&nbsp; 7 11:01 gorename*<br />
	-rwxr-xr-x&nbsp; 1 tonybai tonybai&nbsp; 2954392 11??&nbsp; 7 10:38 gotags*<br />
	-rwxr-xr-x&nbsp; 1 tonybai tonybai&nbsp; 9222856 11??&nbsp; 7 11:01 oracle*</font></p>
<p>安装好这些Binaries后，我们来看看哪些特性被支持了。</p>
<p>再次编辑<font face="Courier New">hellogolang.go</font>：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Courier New">- 新起一行输入fmt.，然后ctrl+x, ctrl+o，Vim 会弹出补齐提示下拉框，不过并非实时跟随的那种补齐，这个补齐是由gocode提供的。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 输入一行代码：time.Sleep(time.Second)，执行:GoImports，Vim会自动导入time包。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 将光标移到Sleep函数上，执行:GoDef或命令模式下敲入gd，Vim会打开$GOROOT/src/time/sleep.go中 的Sleep函数的定义。执行:b 1返回到hellogolang.go。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoLint，运行golint在当前Go源文件上。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoDoc，打开当前光标对应符号的Go文档。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoVet，在当前目录下运行go vet在当前Go源文件上。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoRun，编译运行当前main package。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoBuild，编译当前包，这取决于你的源文件，GoBuild不产生结果文件。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoInstall，安装当前包。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoTest，测试你当前路径下地_test.go文件。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoCoverage，创建一个测试覆盖结果文件，并打开浏览器展示当前包的情况。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoErrCheck，检查当前包种可能的未捕获的errors。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoFiles，显示当前包对应的源文件列表。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoDeps，显示当前包的依赖包列表。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoImplements，显示当前类型实现的interface列表。<br />
	&nbsp;&nbsp;&nbsp; &#8211; 执行:GoRename [to]，将当前光标下的符号替换为[to]。</font></p>
<p><b>三、其他插件</b></p>
<p>到目前为止，我们还有若干特性没能实现，重点是：</p>
<p><font face="Courier New">&nbsp;&nbsp;&nbsp; &#8211; 实时跟随的代码补齐<br />
	&nbsp;&nbsp;&nbsp; &#8211; Code Snippet support</font></p>
<p><b>1、安装<a href="https://github.com/Valloric/YouCompleteMe">YCM</a>(Your Complete Me)</b></p>
<p>在~/.vimrc中添加一行：</p>
<p><font face="Courier New">Plugin &#39;Valloric/YouCompleteMe&#39;</font></p>
<p>保存退出后，再打开~/.vimrc并执行<font face="Courier New"> <img src='https://tonybai.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> luginInstall</font>。</p>
<p>安装完后，下面的提示栏提示：</p>
<p><font face="Courier New">ycm_client_support.[so|pyd|dll] and ycm_core.[so|pyd|dll] not detected; you need to compile YCM before using it. Read the docs!</font></p>
<p>似乎YCM是用了C++编写的模块对性能进行优化了，于是需要手工编译YCM的support库。步骤如下：</p>
<p><font face="Courier New">sudo apt-get install build-essential cmake python-dev<br />
	cd ~/.vim/bundle/YouCompleteMe<br />
	./install.sh</font></p>
<p>构建（编译C++很慢，需要耐心的等一会）ok后，再打开hellogolang.go，逐字的实时补全功能就具备了！Cool！</p>
<p><b>2、安装</b> <a href="https://github.com/SirVer/ultisnips"><b>UltiSnips</b></a></p>
<p>Vim-go默认是用ultisnips引擎插件，但这个插件需要单独安装。</p>
<p>同样，我们利用vundle来安装它，在~/.vimrc中添加一行：</p>
<p><font face="Courier New">Plugin &#39;SirVer/ultisnips&#39;</font></p>
<p>snippet和snippet引擎是分开的。ultisnips是引擎，vim-go的go snippet定义在这里</p>
<p><font face="Courier New"><a class="moz-txt-link-freetext" href="https://github.com/fatih/vim-go/blob/master/gosnippets/snippets/go.snip">https://github.com/fatih/vim-go/blob/master/gosnippets/snippets/go.snip</a></font></p>
<p>编辑hellogolang.go，按照go.snip中的说明，我们输入func后敲击tab键，我们发现期待的：</p>
<p><font face="Courier New">func name(params) type {<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
	}</font></p>
<p>并没有出现。反倒是YCM的下拉提示显示在那里让你选择。似乎是ultisnips和YCM的键组合冲突了。ultisnips官方说明也的确如 此。ultisnips默认是用Tab展开snippet的，而YCM中的Tab用来选择补齐项，我们可以通过设置来避免这些。</p>
<p>我们在.vimrc中添加如下setting：</p>
<p><font face="Courier New">&quot; YCM settings<br />
	let g:ycm_key_list_select_completion = [&#39;<enter>&#39;, &#39;<down>&#39;]<br />
	let g:ycm_key_list_previous_completion = [&#39;<up>&#39;]<br />
	let g:ycm_key_invoke_completion = &#39;&lt;C-Space&gt;&#39;</up></down></enter></font></p>
<p><font face="Courier New">&quot; UltiSnips setting<br />
	let g:UltiSnipsExpandTrigger=&quot;&lt;tab&gt;&quot;<br />
	let g:UltiSnipsJumpForwardTrigger=&quot;&lt;c-b&gt;&quot;<br />
	let g:UltiSnipsJumpBackwardTrigger=&quot;&lt;c-z&gt;&quot;</font></p>
<p>这样让YCM通过回车和向下的箭头来做list item正向选择，通过向上箭头做反向选择。通过ctrl+space来原地触发补齐提示。</p>
<p>而ultisnips则是用tab做snippet展开，ctrl+b正向切换占位符，ctrl+z反向切换占位符。</p>
<p><b>3、安装molokai theme</b></p>
<p>Molokai theme是TextMate的theme的vim port，看着截图挺不错的，于是也安装了一下。</p>
<p><font face="Courier New">&nbsp;&nbsp;&nbsp; mkdir ~/.vim/colors<br />
	&nbsp;&nbsp;&nbsp; 下载或copy <a class="moz-txt-link-freetext" href="https://github.com/fatih/molokai/blob/master/colors/molokai.vim%E5%88%B0%7E/.vim">https://github.com /fatih/molokai/blob/master/colors/molokai.vim到~/.vim</a> /colors目录下<br />
	&nbsp;&nbsp;&nbsp; 在.vimrc添加一行：colorscheme molokai</font></p>
<p><b>四、.vimrc</b></p>
<p>前面讲到了vim-go有许多命令，在:xx模式下执行多显不便，于是你可以定义一些Mappings，比如：</p>
<p><font face="Courier New">&quot; set mapleader<br />
	let mapleader = &quot;,&quot;</font></p>
<p><font face="Courier New">&quot; vim-go custom mappings<br />
	au FileType go nmap &lt;Leader&gt;s &lt;Plug&gt;(go-implements)<br />
	au FileType go nmap &lt;Leader&gt;i &lt;Plug&gt;(go-info)<br />
	au FileType go nmap &lt;Leader&gt;gd &lt;Plug&gt;(go-doc)<br />
	au FileType go nmap &lt;Leader&gt;gv &lt;Plug&gt;(go-doc-vertical)<br />
	au FileType go nmap &lt;leader&gt;r &lt;Plug&gt;(go-run)<br />
	au FileType go nmap &lt;leader&gt;b &lt;Plug&gt;(go-build)<br />
	au FileType go nmap &lt;leader&gt;t &lt;Plug&gt;(go-test)<br />
	au FileType go nmap &lt;leader&gt;c &lt;Plug&gt;(go-coverage)<br />
	au FileType go nmap &lt;Leader&gt;ds &lt;Plug&gt;(go-def-split)<br />
	au FileType go nmap &lt;Leader&gt;dv &lt;Plug&gt;(go-def-vertical)<br />
	au FileType go nmap &lt;Leader&gt;dt &lt;Plug&gt;(go-def-tab)<br />
	au FileType go nmap &lt;Leader&gt;e &lt;Plug&gt;(go-rename)</font></p>
<p>这样我们在命令模式下，输入<font face="Courier New">&lt;,&gt;+&lt;r&gt;</font>就是运行 当前main包，以此类推。</p>
<p>另外下面这个配置使得我们在save file时既可以格式化代码，又可以自动插入包导入语句（或删除不用的包导入语句）。</p>
<p><font face="Courier New">&quot; vim-go settings<br />
	let g:go_fmt_command = &quot;goimports&quot;</font></p>
<p>到这里，我们的Vim Golang开发环境就基本搭建好了。snippet+实时补齐让你Coding如飞！</p>
<p><b>五、附录：.vimrc文件</b></p>
<p>下面是截至目前为止全量.vimrc文件的内容：</p>
<p><font face="Courier New">set nocompatible&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot; be iMproved, required<br />
	filetype off&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot; required<br />
	colorscheme molokai</font></p>
<p><font face="Courier New">&quot; set the runtime path to include Vundle and initialize<br />
	set rtp+=~/.vim/bundle/Vundle.vim<br />
	call vundle#begin()</font></p>
<p><font face="Courier New">&quot; let Vundle manage Vundle, required<br />
	Plugin &#39;gmarik/Vundle.vim&#39;<br />
	Plugin &#39;fatih/vim-go&#39;<br />
	Plugin &#39;Valloric/YouCompleteMe&#39;</font></p>
<p><font face="Courier New">Plugin &#39;SirVer/ultisnips&#39;</font></p>
<p><font face="Courier New">&quot; All of your Plugins must be added before the following line<br />
	call vundle#end()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot; required<br />
	filetype plugin indent on&nbsp;&nbsp;&nbsp; &quot; required</font></p>
<p><font face="Courier New">&quot; set mapleader<br />
	let mapleader = &quot;,&quot;</font></p>
<p><font face="Courier New">&quot; vim-go custom mappings<br />
	au FileType go nmap &lt;Leader&gt;s &lt;Plug&gt;(go-implements)<br />
	au FileType go nmap &lt;Leader&gt;i &lt;Plug&gt;(go-info)<br />
	au FileType go nmap &lt;Leader&gt;gd &lt;Plug&gt;(go-doc)<br />
	au FileType go nmap &lt;Leader&gt;gv &lt;Plug&gt;(go-doc-vertical)<br />
	au FileType go nmap &lt;leader&gt;r &lt;Plug&gt;(go-run)<br />
	au FileType go nmap &lt;leader&gt;b &lt;Plug&gt;(go-build)<br />
	au FileType go nmap &lt;leader&gt;t &lt;Plug&gt;(go-test)<br />
	au FileType go nmap &lt;leader&gt;c &lt;Plug&gt;(go-coverage)<br />
	au FileType go nmap &lt;Leader&gt;ds &lt;Plug&gt;(go-def-split)<br />
	au FileType go nmap &lt;Leader&gt;dv &lt;Plug&gt;(go-def-vertical)<br />
	au FileType go nmap &lt;Leader&gt;dt &lt;Plug&gt;(go-def-tab)<br />
	au FileType go nmap &lt;Leader&gt;e &lt;Plug&gt;(go-rename)</font></p>
<p><font face="Courier New">&quot; vim-go settings<br />
	let g:go_fmt_command = &quot;goimports&quot;</font></p>
<p><font face="Courier New">&quot; YCM settings<br />
	let g:ycm_key_list_select_completion = [&#39;<enter>&#39;, &#39;<down>&#39;]<br />
	let g:ycm_key_list_previous_completion = [&#39;<s-enter>&#39;, &#39;<up>&#39;]<br />
	let g:ycm_key_invoke_completion = &#39;&lt;C-Space&gt;&#39;</up></s-enter></down></enter></font></p>
<p><font face="Courier New">&quot; UltiSnips settings<br />
	let g:UltiSnipsExpandTrigger=&quot;&lt;tab&gt;&quot;<br />
	let g:UltiSnipsJumpForwardTrigger=&quot;&lt;c-b&gt;&quot;<br />
	let g:UltiSnipsJumpBackwardTrigger=&quot;&lt;c-z&gt;&quot;</font></p>
<p><b>六、Mac OS X下Vim配置</b></p>
<p><b>1、MacVim替换</b></p>
<p>Mac OS X下的配置方法稍有不同，因为Mac下系统自带的Vim是7.3版本，YCM要求Vim 7.3.584+版本，因此我们需要安装MacVim以替代自带的Vim，目前MacVim最新版本是version 7.4.258，完全满足要求。在这里<font face="Courier New">https://github.com/b4winckler/macvim/releases</font>可以下载到最新的MacVim，下载后的MacVim可以通过如下步骤替换原Vim。</p>
<p>原Vim安装到/usr/bin/vim下。</p>
<p>MacVim解压后如下：</p>
<p><font face="Courier New">[tony@tonydeair ~/Downloads/MacVim-snapshot-73]$ls<br />
	MacVim.app/&nbsp;&nbsp;&nbsp; README.txt&nbsp;&nbsp;&nbsp; mvim*</font></p>
<p>我们执行以下步骤即可完成vim替换工作：</p>
<p><font face="Courier New">sudo mv /usr/bin/vim /usr/bin/vim.bak //备份一下原vim<br />
	cp mvim /usr/local/bin/<br />
	sudo ln -s /usr/local/bin/mvim /usr/bin/vim</font></p>
<p><b>2、插件安装和配置</b></p>
<p>按照上面Linux Vim的插件安装步骤和配置方法我们来配置MacVim，配置后，我们发现除了<font face="Courier New">molokai</font>的colorscheme没有生效外，其余插件工作均正常。而所有.go文件打开，均无molokai方案的颜色高亮，甚至连一般的颜色高亮都没有了。经过不断调试，发现了一个解决方法，在<font face="Courier New">~/.vimrc</font>中添加几行代码即可：</p>
<p><font face="Courier New"><b>syntax on</b><br />
	<b>au BufRead,BufNewFile *.go set filetype=go</b><br />
	colorscheme molokai</font></p>
<p>但这几行配置代码如果放在~/.vimrc的前面，则UltiSnips会无法工作，我将其移到~/.vimrc文件的末尾，这样就不存在冲突了（看来.vimrc的插件配置的先后顺序会对插件功能的正常使用有影响）。漂亮的molokai colorscheme也会展现出来！</p>
<p style='text-align:left'>&copy; 2014, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2014/11/07/golang-development-environment-for-vim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello，Sublime Text 2</title>
		<link>https://tonybai.com/2013/04/01/hello-sublime-text-2/</link>
		<comments>https://tonybai.com/2013/04/01/hello-sublime-text-2/#comments</comments>
		<pubDate>Mon, 01 Apr 2013 06:58:41 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Blogger]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Codecs26]]></category>
		<category><![CDATA[ConvertToUTF8]]></category>
		<category><![CDATA[Ctags]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[PackageControl]]></category>
		<category><![CDATA[Programmer]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SublimeText2]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[学习]]></category>
		<category><![CDATA[工作]]></category>
		<category><![CDATA[开源]]></category>
		<category><![CDATA[程序员]]></category>
		<category><![CDATA[编辑器]]></category>

		<guid isPermaLink="false">http://tonybai.com/?p=1238</guid>
		<description><![CDATA[用惯了Vim后，也会有一种尝试新Editor的冲动，这回Sublime Text 2满足了我的这个需求。据说Sublime Text是目前最火的代码编辑器之一，我周围为数不多的几个比较Geek的同事都已经开始使用Sublime Text 2或用了很长时间了，其官方网站首页的Feature Demo也的确非常地炫。 安装Sublime Text 2 我的实验环境Ubuntu 12.04.1 32-bit Desktop版，默认Ubuntu Unity桌面，iBus拼音输入法。 Sublime Text 2的安装极其简单，遵循着download（http://www.sublimetext.com/2） -&#62; unzip -&#62; add path -&#62; start and use的经典路线。我下载的Sublime Text 2是2.0.1版本，启动后一切正常。 安装后目录结构 安装后的Sublime Text 2的目录结构非常简洁： $ ls Icon/ &#160;PackageSetup.py &#160; Pristine Packages/ lib/ &#160; sublime_plugin.py &#160; sublime_text* lib下是自带的Python26环境；Pristine Packages下是各种编程语言的插件包。 在我的环境下Sublime Text 2的用户配置与包环境放在了~/.config/sublime-text-2/下面， $ ls Installed Packages/ &#160;Packages/ [...]]]></description>
			<content:encoded><![CDATA[<p>用惯了<a href="http://tonybai.com/2008/12/30/in-depth-study-vim/">Vim</a>后，也会有一种尝试新Editor的冲动，这回<a href="http://www.sublimetext.com/2">Sublime Text 2</a>满足了我的这个需求。据说Sublime Text是目前最火的代码编辑器之一，我周围为数不多的几个比较Geek的同事都已经开始使用Sublime Text 2或用了很长时间了，其官方网站首页的Feature Demo也的确非常地炫。</p>
<p><strong>安装Sublime Text 2</strong></p>
<p>我的实验环境<a href="http://tonybai.com/2012/12/04/upgrade-ubuntu-to-1204-lts/">Ubuntu 12.04.1</a> 32-bit Desktop版，默认Ubuntu Unity桌面，iBus拼音输入法。</p>
<p>Sublime Text 2的安装极其简单，遵循着download（http://www.sublimetext.com/2） -&gt; unzip -&gt; add path -&gt; start and use的经典路线。我下载的Sublime Text 2是2.0.1版本，启动后一切正常。</p>
<p><strong>安装后目录结构</strong></p>
<p>安装后的Sublime Text 2的目录结构非常简洁：</p>
<p><span style="font-family:courier new,courier,monospace;">$ ls<br />
	Icon/ &nbsp;PackageSetup.py &nbsp; Pristine Packages/<br />
	lib/ &nbsp; sublime_plugin.py &nbsp; sublime_text*</span></p>
<p>lib下是自带的Python26环境；Pristine Packages下是各种编程语言的插件包。</p>
<p>在我的环境下Sublime Text 2的用户配置与包环境放在了~/.config/sublime-text-2/下面，</p>
<p><span style="font-family:courier new,courier,monospace;">$ ls<br />
	Installed Packages/ &nbsp;Packages/ &nbsp;Pristine Packages/ &nbsp;Settings/</span></p>
<p>这里面最重要的目录就是Packages目录了，这里是Sublime Text 2用第三方包扩展自身Feature的包存储路径。</p>
<p><strong>安装package control</strong></p>
<p>package control包之于Sublime Text 2就好比apt工具之于Ubuntu，它是一个方便第三方包安装、卸载和管理的第三方包。在其官网(http://wbond.net/sublime_packages/package_control)上明示了其安装方法：</p>
<p>* 敲入 ctrl + ` 调出命令行窗口<br />
	* 在命令行窗口中输入下面的代码，回车执行。</p>
<p><span style="font-family:courier new,courier,monospace;">import urllib2,os; pf=&#39;Package Control.sublime-package&#39;; ipp=sublime.installed_packages_path(); os. &nbsp; &nbsp; &nbsp; &nbsp;makedirs(ipp) if not os.path.exists(ipp) else None; urllib2.install_opener(urllib2.build_opener(urllib2. &nbsp; ProxyHandler())); open(os.path.join(ipp,pf),&#39;wb&#39;).write(urllib2.urlopen(&#39;http://sublime.wbond.net/&#39;+pf.replace(&#39; &#39;,&#39;%20&#39;)).read()); print(&#39;Please restart Sublime Text to finish installation&#39;)</span></p>
<p>* 重启Sublime Text 2。</p>
<p>注意：如果需要代理访问外网的话，需要正确设置<a href="http://tonybai.com/2012/11/21/setup-http-proxy-with-squid/">http_proxy</a>环境变量。</p>
<p>敲入&quot;ctrl + shift + p&quot;可打开命令窗口，输入&quot;Package Control&quot;，你会看到窗口下拉提示中Package Control支持的功能，常用的我们会选择：&ldquo;Package Control: Install Package&rdquo;。</p>
<p><strong>安装中文支持</strong></p>
<p>中国程序员每每在尝试一种国外程序员新开发的编辑器时，都会遇到<a href="http://tonybai.com/2009/09/28/also-talk-about-vim-charset-configuration/">中文字符集编码</a>的问题，这次Sublime Text 2也不例外，它原生就不支持中文显示。还好中国程序员是无比聪明的，开发了<a href="https://github.com/seanliang/ConvertToUTF8">ConvertToUTF8</a>这样的第三方包，让我们可以看到中文并用中文编辑。</p>
<p>最简单的安装ConvertToUTF8的方法就是用Package Control安装，选择Package Control: Install Package后，搜素ConvertToUTF8，找到后，点击即可安装。安装后，你会在~/.config/sublime-text-2/Packages下面看到ConvertToUTF8包目录。</p>
<p>再次启动Sublime Text 2后，打开一个GBK编码的中文文档，居然提示ConvertToUTF8工作不正常。后发现ConvertToUTF8主页上有提示，Python 2.6下的ConvertToUTF8需要一个<a href="https://github.com/seanliang/Codecs26">Codecs26</a>的Package才能正常运行。下载Codecs26后，解压安装到Packages下面，重新启动Sublime Text 2，Sublime Text 2直接dump core。从Packages目录下将Codecs26删除后，Sublime Text 2恢复正常。</p>
<p>又细致读了ConvertToUTF8作者的README文件，发现master branch上的Codecs26是for 64位版本的，我需要下载x32 branch上的包。的确，下载并安装x32 branch上的Codecs26后，Sublime Text 2启动OK，转换中文OK了。</p>
<p>注意：不要与其他支持GBK转换的包（比如GBK Encoding Support）混用，否则ConvertToUTF8无法works。</p>
<p><strong>解决中文输入问题</strong></p>
<p>好不容易能看GBK编码的中文文件了，却发现无法输入中文，无论如何切换输入法和重启输入法，都无法输入中文。网上介绍可通过&quot;Input Helper Package（cd .config/sublime-text-2/Packages; git clone http://github.com/xgenvn/InputHelper.git）&quot;解决问题。问题的确可以解决，不过输入中文时太麻烦了：需要先敲入&quot;ctrl+shift+z&quot;调出中文输入框，再在这个框里输入中文。</p>
<p>网上都说这是iBus输入法与Sublime Text 2的兼容问题，要想解决就要换<a href="http://www.fcitx.org">fcitx</a>。以前用过fcitx感觉默认输入法比较弱，不过现在fcitx有google pinyin了，体验一定会提高不少。通过下面命令一键安装fcitx：</p>
<p><span style="font-family:courier new,courier,monospace;">sudo apt-get install fcitx fcitx-googlepinyin</span></p>
<p>安装后，在&ldquo;语言支持&rdquo;中用fcitx替换掉iBus。在&ldquo;启动应用程序&rdquo;中加入：</p>
<p><span style="font-family:courier new,courier,monospace;">名称: Fcitx<br />
	命令: /usr/bin/fcitx -d<br />
	注释t: Fcitx启动</span></p>
<p>注销再登录后，再打开Sublime Text 2，终于可以输入中文了。</p>
<p><strong>功能</strong></p>
<p>用了一遭儿，Sublime Text 2最吸引我的Feature包括：&ldquo;Goto Anything&rdquo;和&ldquo;Multi-Selection&rdquo;。在一个工程中，通过ctrl + p调出一个输入框，Sublime Text 2首先在文件名级别对你输入的文本进行匹配；待选择好文件后，继续输入@，可看到下拉列表中显示这个文件中所有函数名的名称列表；如果输入的是#，那么下拉列表中将显示该文件中的所有符号。选择某个函数名或符号后，光标将停留在某个符号上，这时我们可以用Multi-Selection这个功能了，如果你要将这个文件中同名符号全选出来，直接Alt+F3即可；如果要选择接下来的N个同名符号，那么敲入N次ctrl + D即可。</p>
<p>不过要想实现<a href="http://tonybai.com/2009/02/23/solve-some-problems-when-using-cscope/">ctags</a>那种在符号上跳转到符号定义或符号调用者的功能，Sublime Text 2还无法原生支持，可考虑安装Sublime Text 2的Ctags插件实现：直接在Packages目录下git clone https://github.com/SublimeText/CTags.git。之后：<br />
	- &ldquo;ctrl +t, ctrl+ r&quot;会重新生成tags文件(前提：系统内安装了ctags程序)<br />
	- &quot;ctrl +t, ctrl + t&quot;会跳到光标所在符号的定义处;<br />
	- &quot;ctrl + t, ctrl + b&quot;会跳回上次的位置;</p>
<p><strong>感受</strong></p>
<p>Sublime Text 2给我的最大感受就是&ldquo;快&rdquo;！你在搜索、切换符号、选择文件列表中文件或符号的同时，整个文件会同步的展现你的屏幕上。</p>
<p style='text-align:left'>&copy; 2013, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2013/04/01/hello-sublime-text-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
