Vim常用快捷键总结
Vim的学习之路真的很长,永远有记不完的命令,永远会突然冒出一个新插件。不过我总算从Vim的荆棘中一路走过来了,现在真的是苦尽甘来,时刻体会它带给我的喜悦和惊奇。下面对我所学习所了解到的常用命令做一个基本总结:
###Normal mode:
>> indent current line
n>> indent the next n line
. repeat last command
m,n>> indent from m to n line
== autoindent current line
n== autoindent the next n line
gg=G autoindent the whole file
instance_eval vs class_eval
Ruby中类其实也是Class的实例。而且instance_eval必须由实例来调用,class_eval必须由类来调用。具体参考下面的实例:
class A
end
a = new A
a.instance_eval do
self #=>a
def test
puts "this is a singleton method of instance a"
end
end
a.test #=>this is a singleton method of instance a
b = A.new
b.test #=>NoMethodError
搭建Git服务器
从开始用Git到现在也已经有一年时间了,但一直都在本地开发,用于管理本地的代码,没有进行多人协作开发,所以也没有必要搭建一个Git服务器。
但就在昨晚,我在教研室给大家介绍Git工具时,感觉大家对这个工具貌似没有太大的热情,猜其原因,可能是因为大家对这个工具过于陌生,而我又讲的太过细节,所以他们可能听得有点烦。但是只有试过之后才能感觉其方便之处,我也希望教研室的同学都能掌握它,所以便决定在教研室搭建一个Git服务器,供大家使用,也思索着今后的项目都用git来进行管理。毕竟现在教研室只有我一人使用git,其他同学都用svn,甚至不用(其实用svn的同学不超过3个),开发项目也难以统一,而我个人在使用过git后又不想转向svn,同时也非常希望身边的同学也能去使用git这么一个优秀工具,所以只能忽悠他们转向git了。不过经昨晚一役,证明了我忽悠人的本领完全不到家,看来今后得好好练练了。前奏有点过于冗长,下面进入正题吧。
…更新Octopress
现在已记不清接触Octopress多长时间了,只依稀记得当时配置Octopress配了好久,然后依然失败,后又忙于其他的事情,所以搭建工作便搁置一旁,七月中旬时间比较充足,所以又开始再次折腾,后来终于搭建成功,所以7.18便发表了第一篇博客。后来一个月之后又开始了我的换肤工作,一切都好,唯一的缺陷是Gravatar的图像没有显示出来,所以便向theme的作者发问,后来也忘了这茬事。就这样又过了一月,直到今天,突然发现我的unread消息里面有几条关于我的message,便打开浏览,才发现作者给的回复,说图像没显示是个bug,现已修复。具体见:
https://github.com/shashankmehta/greyshade/issues/42
我便立马更新了我的Octopress。更新方法如下:
# Get the latest Octopress
git pull octopress master
# Keep gems updated
bundle install
# update the template's source
rake update_source
具体参考:
http://octopress.org/docs/updating/
参考时请务必注意:如果您的octopress主题不是octopress默认主题,请不要执行rake update_style,否则会被还原成默认主题。
本博客采用的主题为:
…VirtualBox安装ArchLinux系统
都说ArchLinux很适合折腾,趁今天有时间,就试着安装了一把,不过看ArchLinux的Beginners’s Guide,照着其步骤来,结果还是看的云里雾里,看的人头大。便直接上Youtube上找了一个视频,顿时豁然开朗。安装概览如下:
##ArchLinux Install
- 分区
- 格式化分区
- 挂载分区
- 更改安装镜像
- 安装基本系统
- 生成fstab
- Chroot到新系统
- 配置系统
- 开启网络服务
- 创建初始化ramdisk环境
- 设置root密码
- 安装配置bootloader
- 卸载分区并重启系统
- 安装图形用户界面
详细步骤如下:
###1. 分区
虚拟机挂在iso镜像后,然后启动系统,进入后默认进入root提示符,然后输入:
root#cfdisk
进行分区,一般分三个即可。最后分区结果如下:
dev/sda1 / 8G
dev/sda2 /swap 1G(在空间最后)
dev/sda3 /home 4G
每个人的分区情况都可能不同,具体依照自己的分区来决定,以下操作都是根据我的分区来进行。
…Cookies vs Sessions
Http是无状态的协议,客户端给服务器发送请求,服务端响应客户端的请求,会话结束。这样两次会话间不便没有任何关联。但有时候需要在会话间进行信息共享,如:购物车,保存用户名与密码等。为此,cookie与session便诞生了,它们的存在就是为了弥补http协议无状态的缺陷。
cookie与session最大的不同是:cookie保存在用户的浏览器中,而session则保留在服务端。正是这种不同决定了它们的不用使用场合。
##Cookie
cookie机制是通过扩展http协议来实现的。服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。其实纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器端。
cookie主要内容包括:Name,Content,Path,Domain,Expires(过期时间)等。Domain与Path一起构成cookie的作用范围。
若不设置Expires,则默认的cookie生命周期为浏览器会话期间,一旦浏览器关闭,cookie则会被清理掉,这种生命周期为浏览器会话期的cookie被成为会话cookie。会话cookie存储在内存中而不是在硬盘上。
若设置了Expires,浏览器则会把生成的cookie保存在硬盘上,即使浏览器关闭后再打开,cookie依然有效,直至超过设置的expires。
另外,session大小有限制,一旦浏览器禁用cookie,则采用cookie的购物网站便不能进行购物,所以这时候得用session了。
…查看网站所用Web服务器类型
学习Rails的Layout过程中,其中有提到curl,所以便简单的看了下curl的功能。虽说以前学习Shell的过程中也看到过curl,不过没怎么用过,只知道和wget功能类似,只是wget是将请求的web资源下载到本地,而curl则是在shell中显示,至于有什么其他功能也便不清楚。但是今天发现curl其实还可以用来查看website所用的web服务器类型,通过curl -I url-you-want-to-lookup命令查看即可。以下是我查看ruby-china的一个截图:

从中可以发现ruby-china采用的是nginx服务器。至于curl其他的功能慢慢再发掘吧。
…账号注册通过邮箱激活
邮箱激活目的
防止用户注册时所填写的信息为虚假信息
邮箱激活的原理
用户注册时,根据用户名、Email及注册时间(精确到ms)等信息通过特定的算法(如:MD5、SHA,最好不可逆)生成相应的信息摘要(也称消息摘要)作为注册的激活码,保存到数据库当中,并且将其作为url的参数,将带有激活码的url链接发送到用户注册的Email中。
只有当用户进入邮箱中并点击该链接后,通过url中的激活码找出数据库中匹配的用户,并将此账号设为“已激活”的状态。
注:此过程没有考虑激活码过期问题,同时信息摘要也可以通过随机数来表示,不一定非要通过用户名等信息生成
Rails代码参考:
http://stackoverflow.com/questions/12805523/activate-user-via-email-in-rails
…Bash到oh-my-zsh的转变
从开始使用到现在一直使用的bash,虽然以前听过ksh,csh,sh等,但都不曾用过,今年开始zsh便不断地出入在眼前,但没真正见人用过,也不知道效果咋样,所以也没做尝试。
另一个原因是各大linux默认都是bash,说明其功能不错,而且也处于懒的原因,就没折腾。但最近在使用tmux的过程中发现bash的提示符只显示-bash4.2$字样,并没有显示成user@hostname directory,在加上西安rubyist的熟人皓哥强烈推荐,这就坚定了我舍弃bash转到zsh的决心,二话不说,立马上GitHub上找到oh-my-zsh。就照着readme开始尝试,结果出现了错误,Google找到答案,是zsh没有安装才导致,所以就yum install zsh安装了zsh,随后在通过
curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh
安装了oh-my-zsh。不过此时系统默认还是bash,所以还得更改系统默认的shell,方法如下:
###1. 修改/etc/shells文件
先通过$which zsh查看zsh的位置,我zsh位于/usr/bin/zsh。然后再查看/etc/shells中是否含有zsh:
$< /etc/shells grep zsh
如果结果中没有/usr/bin/zsh,则需要手动将/usr/bin/zsh添加到/etc/shells文件中。
###2. 更改默认的shell
通过$chsh -s /usr/bin/zsh更改系统默认shell,退出系统,重新登陆便会发现系统默认的shell已经变为zsh,同时也可以更改zsh默认的主题,在~/.zshrc中更改ZSH_THEME属性即可,其被选的值在oh-my-zsh theme中任选一个即可。
经过以上两步,oh-my-zsh便安装完成。但是写博客时发现rake new_post["xxx"]时出现zsh: no matches found: new_post错误,Google找到答案,只需改为rake 'new_post["xxx"]'即可,原因是zsh会将一些特殊符号当作查找文件的通配符等,根源解决方法是:取消zsh的通配(Glob),即在~/.zshrc中加入alias rake="noglob rake"。
参考:oh-my-zsh官网
…vim-airline插件patched font配置成功
前段时间装好了airline插件,但是没呈现应有的效果,原因是没有安装字体。根据官网的提示需要安装powerline的字体,我便照着powerline官网的配置方法来,但是还是没有成功。其原因是我安装了patched fonts,但是没有将terminal的font设置为patched fonts中的一种,所以statusbar会有乱码。下面对安装patched fonts做一个小结。
安装patched fonts方式请参考:powerline字体配置,尽管文档很详细,但是还是重复一下:
1.Download patched fonts
$mkdir ~/.fonts新建一个font文件夹,然后$cd ~/.fonts进入.fonts文件夹。$git clone git@github.com:Lokaltog/powerline-fonts.git将powerline的patched fonts拷贝到~/.fonts目录下,目录结构如下图:

2.Install the patched fonts to your System
运行$fc-cache -vf ~/.fonts安装patched fonts到系统中
3.Set Terminal fonts
设置Terminal字体非常重要,我初次配置时,安装patched fonts,但是由于没有set terminal font,所以statusbar显示乱码。设置方法如下:
Edit——Profiles——Default(Edit)——General——Font,选择~/.fonts/powerline下的某一种即可(可选范围一定要在刚才下载的patched fonts中选一种,否则乱码。),当然也可以采取powerline font installing中的另一种方式,不过我没做尝试,有兴趣的朋友try it。配置截图如下:

最后可以在~/.vimrc中更改airline的theme。更改方式如下:
let g:airline_theme="molokai"
…