vim文件的折叠与展开方式


最近一直在用Vim学习Ruby,但是一直有个问题困扰:

那就是文件无法折叠,但是我记得以前看过Vim的视频,里面见别人用到了折叠与展开。文件比较小时,此功能便无用,但一旦文件量大时,折叠与展开便显得尤为重要了。

折叠的方式有以下几种:

  1. manual
  2. indent
  3. syntax
  4. marker
  5. expr
  6. diff

###1. Manual method

vim默认的折叠方式是此种方式,不需要设置即可。要启用其他方式还得采用:set foldmethod=xxx或者:set fdm=xxx来设置。

使用方法

v或者V进入visual mode,然后选中要折叠的文字,按zf便可折叠,折叠后按za或者zO便展开。

同时也可以通过zfnj的方式将接下来的n行折叠。类似也有zfnk等;zR则打开所有的折叠。总结下来就是:

  • zf => create a fold
  • za => unfold
  • zf#j => fold down # lines
  • zf#k => fold up #lines
  • zR => unfold all

###2. Indent method

缩进方式主要是根据代码缩进的方式来折叠/展开代码。要使用缩进方式,则需要做配置,:set foldmethod=indent或者在~/.vimrc中配置:set foldmethod=indent

其快捷键如下: zM => fold all zR => unfold all za => fold/unfold

###3. Syntax method

采用syntax方式,则只需如下配置即可:

:set fdm=syntax

按键方式与上述相似

###4. Marker method

Read more ⟶

Linux活动发起


独乐乐不如众乐乐,独自一人埋头苦学不如一群兴趣相投之人的一起交流。记得以前大一大二时,希望能有一个领路人领着自己学习,帮自己找准学习的方向,毕竟当时太年轻,太多东西不了解,所以不知道软件这行业该学习什么,哪些东西比较有兴趣,一切源于自己接触的太少,身边也没有可交流之人。再加上学校大一大二和大三大四分隔新旧两校区,交流就更少。

正是因为自己的这些经历,然后再加上近来参加西安的rubyist party,促使了我组建Linux小组并且定期举办活动的冲动。一个人的埋头苦学,所见所闻永远局限在某个狭小的空间,只有走出去,与他们交流才能拓宽自己的知识面,提升自己的认知度,也算是多了一些朋友,多了一些交流。正所谓话不投机半句多,与自己志不同道不和的人交流真是有点对牛弹琴的感觉。所以要交流得找兴趣相投志同道合之人。

打算成立的小组规模大致10人左右,无需太多,也不希望有滥竽充数的现象。所以希望小组成员能满足以下条件:

  • 对软件感兴趣
  • 熟悉Linux(基本操作一般没问题)
  • Vim | Emacs

具备以下更佳:

  • Git
  • Ruby/Python/Lisp/Scala/Prolog
  • 个人博客

初期打算:

  • 每周一次Party(主要技术交流)

有兴趣的学习请联系我,联系方式:

  • 新郎微薄:xautjzd

其他联系方式见我的About

Read more ⟶

Ruby中symbol与string的区别


记得当初学习Ruby基本语法时,还为Symbol与String的异同纠结了好久,后来经过一段时间的摸索,大致有了了解,但让我给他人解释,这点我还是办不到。但是今天看到了一篇博文,让我彻底明白他们的区别。

symbol定义

Symbol其实就是string加上前缀:。

二者异同点

其实Symbol与String本质相同,是string 的两种不同呈现方式。由于受SmallTalk影响,Ruby一切皆对象。所以每次给string赋值,name="xautjzd"其实都是在内存中创建一个新对象。每次创建的对象的object_id都不相同。

而symbol则不同,symbol创建一次即可。以后所有的操作都是指向先前创建的对象。所以object_id相同。

不同点大致有三:

  1. symbol为常量,值不能改变。
  2. 多次使用同一个symbol,object_id相同,而多次使用string,每个对象有不同的object_id。
  3. String的方法,eg:#upcase,#split不能用于Symbol。

参考网址

http://www.gaurishsharma.com/2013/04/understanding-differences-between-symbols-strings-in-ruby.html(http://www.gaurishsharma.com/2013/04/understanding-differences-between-symbols-strings-in-ruby.html)

Read more ⟶

Vim学习资源


实用的快捷方式

  • gf 快速跳转到定义
  • <C + 6> 返回到上次编辑的文档
  • % 括号匹配{}
  • #/*,g#/g* 向前/向后搜索光标所在的词
  • gi 跳转到上次编辑的位置
  • gi 显示光标所在字符的编码
  • gH 开始选择行模式
  • vi" 选中"之间的文本(不包括")
  • vi{ 选中{之间的文本(不包括{)
  • ci( 改变之间的文本
  • di[ 删除[之间的文本(不包括[)
  • da[ 删除[之间的文本(包括[),ca、va类似
  • C 修改至行尾
  • D 删除至行尾
Read more ⟶

更换Octopress主题


Octopress博客搭建已经有一阵了,但一直采用的默认的主题,没时间更换。今天特意抽时间来更换下,先上Octopress官网了解了下更换Theme的原理,然后上Octopress所在的源码托管平台GitHub,在其Wiki上找到了第三方Themes,便从前到后大致将各种themes都预览了一遍,最后选择了Greyshade主题,安装方法官网写的已经非常详细,这里再啰嗦一遍:

###Install

$ cd octopress  #octopress directory
$ git clone git@github.com:shashankmehta/greyshade.git .themes/greyshade
$ echo "\$greyshade: color;" >> sass/custom/_colors.scss //Substitue 'color' with your highlight color
$ rake "install[greyshade]"
$ rake generate

至此,安装过程便已完成。

左侧的显示效果主要配置在_config.yml文件中。

###pages显示

Octopress默认只有Homepage和Archives两个导航菜单,不满足要求,我便又添加了"编程"、“Linux”、“所思所想”和“关于我”这几个。“关于我”的页面为静态页面,在source/blog/aboutme/下,其他的几个需要将相关的文章显示在相应的导航菜单下,便需做如下配置:

---
layout: category_index
title: Thinking
category: Thinking
---

这样后,只要new_post并且category为Thinking的页面都会集中在所思所想对应的页面显示。

Read more ⟶

Linux下截图工具shutter的安装与配置


我一直使用的是Fedora17,自带的截图工具实在不敢恭维,但也就这样断断续续的用着,不过也用的不多。但今天突然鬼使神差的搜了下其他的截图工具,Google搜了下,发现好多提到shutter,既然这么多文章都提到,说明肯定着实不赖,便尝试了下。安装及配置如下:

###1.安装 安装过程很简单,执行下面命令即可: #yum install shutter ###2.配置 QQ截图快捷键<ctrl>+<alt>+A用习惯了,所以也对shutter继续保留这个快捷键。具体配置方法如下: 在System Tools>System Settings>Keyboard>Shortcuts>Custom Shortcuts中添加了三个快捷键:

  • 截图整个屏幕(shutter -f)

  • 截图当前活动窗口(shutter -a)

  • 截图选定区域(shutter -s)

具体配置及对应的快捷键设置参考下图:

Read more ⟶

安装Powerline过程中的收获


Powerline插件已经多次耳闻目见,但是一直没做尝试,今天再次看到便忍不住试了下,结果还没成功。可能是由于字体的原因吧,在找答案的过程中邂逅了airline,据说比powerline加载更快,而且还无需安装字体。所以便果断地换为airline。只需在vimrc中加入bundle bling/vim-airline即可。当然前提是在~/.vimrc中已有如下配置:

set laststatus=2  "Always show the status line
set noshowmode
set t_Co=256

配置好后效果如下图所示:

配置好后,在bash中显示没问题,但是在tmux中显示就有问题了,先前配置的效果无法显示。网上也找了好久答案,才得以解决,方法如下:

1.$vim ~/.tmux.conf

在~/.tmux.conf文件中添加如下代码:

set -g default-terminal "screen-256color"

2.$vim ~/.bashrc

在~/.bashrc中添加如下代码:

alias tmux="tmux -2"

tmux -2是强制tmux的终端支持256种颜色。

配置好后,显示没问题,但是在写博客的过程中发现vim突然不能输入中文了,不知为何。最后在~/.vimrc添加: set guifont=* 就顺利解决,不过原因待深究,要学的东西太多。

Read more ⟶

户县之行


前天应阿亮之邀,去了趟少春家,现将所见所闻予以记录,聊以慰藉。

我们三(阿亮,少春和我)于前天下午将近六点出发去户县甘河镇的少春家,大致七点半左右到。到家时,天刚暗下来。从这一刻开始到今天下午,差不多有两天的时间体验了下陕西乡村的风土人情,而体验的最佳方式则是通过味觉和视觉。

首先,从味觉方面说,大致品尝了他家的臊子面,煎饼和yuyu(只知其音,不知其写法,也念he’r)。以前只是听陕西的同学说过他们的习俗:早晚稀饭,中午吃面,而且稀饭比较稀,上面几乎看不到米粒,碗底才有。经此一见,果不其然。不过他们煮稀饭的米和我家乡不同,第一次见识到糯米也可用于煮稀饭,以前我只知:糯米用于蒸糯米饭、做汤圆和糍粑。中午吃的是臊子面,而臊子面的核心在于臊子。阿姨做的臊子挺不错,味道很好,唯一不足的是醋放的有点多,略酸,不过不太影响总体的感觉,至少比食堂阿姨做的强好几倍。盛面的家伙很给力,直接上脸盆。碗也给力,平时在食堂吃一碗足已,但这两天都是至少吃一碗。少春则更给力,今天中午直接吃了四碗。昨晚吃的是煎饼,和我家乡的饼有点像,只是做法不同,厚薄不同,但是不得不说味道比我家乡的那个饼味道略好,这得益于我喜欢吃薄饼,而我家乡的那饼则略显厚。

Read more ⟶

终端分屏工具tmux的安装与常用操作


##1. tmux简介

tmux是terminal multiplexer的简称,是一款终端分屏的工具,可以在同一屏幕中划分出多个独立的shell环境,这样便于对比,唯一的缺陷是窗口比较小而已。一个server可以有多个session,一个session可以有多个windows,一个windows可以有多个pane.具体见官网介绍。

##2. 安装

采用相应系统的包管理器即可安装。我装的是fedora,现以fedora为例:

#yum install tmux

包不到1M大小,很快便安装完成。

Read more ⟶

Vim的代码自动补齐插件——UltiSnips


暑假时间充足,便又开始学习自己喜欢的Ruby。而学Ruby的最佳环境是Mac,其次是Linux,最次是Windows。Mac买不起,只能在Linux上折腾了,一台台式机装的Fedora17,自己的本是xp系统,装了不少微软的一套东西,毕竟教研室的项目都是在.net环境下进行的,不敢轻易换系统,所以便在本上装了个VirtualBox虚拟机,虚拟了一个Ubuntu。上面也配好了Ruby环境,毕竟本方便,带到哪里都可以学,但平时的Linux编程都是在台式机下,毕竟性能比虚拟机好。

而学习Ruby一般都是在Vim/Emacs/SublimeText 2下,RubyMine貌似很适合开发Ruby,由于是商业产品,没钱购买也就舍弃了,毅然决然的选择了Vim.都说高手使用的是Vim,想必必有可取之处。但是Vim的学习路线比较陡峭,开始是一段痛苦期,经过一段时间的摧残后,甜蜜的时光便来临了,各种强大而高效的插件让你目瞪口呆,顿时感觉其他IDE都蒻爆了。幸好我以前对Vim的基本操作便有了了解,所以再次学习起来便不那么痛苦,甚至不想回到Windows环境,不想再用其他的Editor。我现在用的插件并且给我印象深刻的大致有这么一些:Vundle,Ctrlp/command-T,UltiSnips/Snipmate,YouCompleteMe/SuperTab,NerdTree,Tagbar,FuzzyFinder,vim-rails,Markdown等。

Read more ⟶