github上面的活跃的dotfiles项目[yadr](https

这里主要就是官方readme文档的 Vim部分 的记录。基本的vim操作就不详细介绍了。

参考: http://skwp.github.io/dotfiles/

有什么?

yadr提供了

导航

  • ,z 切换到前一个缓冲文件(buffer),相当于 :bp[revious]
  • ,x 切换到后一个缓冲,相当于命令行的 :bn[ext]
  • Alt+jAlt+k 下跳或者上跳一个函数;好像不起作用
  • Ctrl+o 跳转到旧的指针位置,这是vim的标准快捷键,非常有用
  • Ctrl+i Ctrl+o的逆操作,也是标准按键

搜索与代码导航

  • ,f 跳转到类定义,需要系统安装了ctags,并创建tags file。

ctags是一个独立的软件,不包含在vim之中,使用yum安装即可,在项目目录下运行 ctags -R . 后会创建tags file,这是就可以使用跳转到定义的功能了。

  • ,F,f相同不过在新建垂直分屏(vsp)显示定义
  • ,gf或者 ctrl+f 跳转到光标坐在变量名对应的文件,但是在一个新的分栏中显示,这在java中比较好用
  • gF 标准快捷键,打开文件
  • K 搜索光标所在单词,并在quickfix窗口显示结果,这个功能需要安装silver serach, sudo yum install -y the_silver_searcher
  • ,K 没太多用,Grep the current word up to next exclamation point (useful for ruby foo! methods)
  • ,hl 开关搜索结果的高亮,相当于 :set noh与其逆操作
  • ,gg或者,ag: 搜索,键入这个命令后,会出现一个输入符,在双引号中输入字符后回车会搜索包含这段字符的行
  • ,gd 搜索包含字符的函数定义, grep def,不太用
  • ,gcf grep current file的缩写,查找对本文件的引用
  • // 清空搜索
  • ,,w ,<Esc>的alias,EasyMotion,highlights jump-points on the screen and lets you type to get there
  • ,mc 多标签,这个功能和sublime中的比较像,在一个单词上面使用,mc会记录这个单词,然后使用Ctrl-n或者Ctrl+p选择前一个或者后一个相同的单词的,或者使用Ctrl+x跳过一个。 这个比较有用
  • gK 打开光标所在单词同名的文档?不常用

文件导航

  • ,t 文件选择器,不常- 用,键入指令后可以输入字符筛选文件
  • ,b 打开缓存区的一个文件,比较常用
  • Cmd-Shift-M 跳转到方法,Linux下好像没用。
  • ,jm jump to models,可能在rails里面比较有用
  • Alt+Shift+N nerd tree toogle,好像没什么用
  • Ctrl+\ 在侧边栏文件树显示当前文件,和sublime的sidebar有点像
  • Cmd-Shift-P 清空ctrlp 缓存,没用过

常用编辑快捷键

  • Ctrl+space 自动补全- , Tab键
  • ,#; ,"; ,'; ,]; ,); ,}; 这些优点麻烦的样子,待补充
  • ,. 跳转到上一个编辑地点。和'.的作用相同。
  • ,ci change inside any set of quotes/brackets/etc。其作用是删除”, {}, ()之间的字符并进入插入模式

多标签,多窗口,分割模式

  • alt+n - 快速跳转到指定的tab
  • Ctrl-h,j,k,l 在分栏窗口中上下左右移动。
  • Q 关闭当前的window,非常方便
  • vvCtrl-w,v一样,vertical split, 上下分栏
  • ssCtrl-w,s一样,horizontal split,左右分栏
  • ,qo 打开quickfix, qo => quickfix open, 有用
  • ,qc 关闭quickfix, qc => quickfix close, 有用,yadr配置的vim在保存文件时会做语法检查,如果检查不通过会在quickfix窗口显示错误,并且不会自动消失,这时候也许需要 ,qc来关闭它。

其它常用

  • Ctrl-p 循环历史剪切板,这个很有用,p是粘贴,Ctrl+p会粘贴之前的剪切板内容
  • ,yr view yanking, 查看历史复制记录, q退出查看
  • crs, crc, cru cr 应该是 coerce(强制), s是snake, c是camelcase, u是UPPER,转换变量大小写下划线形式,比较有意思,可以使用:help abolish查看更多
  • :NR NarrowRgn,看名字不知道是干什么的,其实是选中一段代码,然后:NRvim会新开一个split把选中的代码放在心的split中操作,操作完后,wq会把结果覆盖掉原来选中的代码。也挺有用的。
  • ,ig toggle visual indentation guids
  • ,cf 拷贝当前文件的完整路径到系统剪切板
  • ,cn 拷贝文件名
  • ,yw yw是从复制从光标位置开始到单词结束,,yw是在任意位置复制整个单词
  • ,ow 使用yank buffer中内容覆盖当前所在的单词,ow => overwrite
  • ,ocf 打开所有git标记为修改过的文件,在splits中打开。使用git版本控制下的文件才有用, ocf => open changed files
  • ,w 去掉尾部多余的空格,应该很有用, StripTrailingWhitespaces
  • sj 把单行的hash表格式化为多行的
  • sk unsplit a link 应该不怎么用
  • ,he he => html escape
  • ,hu hu => html unescape
  • Alt+Shift-A align things, 好像没什么用
  • :ColorToggle 顾名思义
  • :Gitv git log browser
  • ,hi 显示当前高亮的组
  • ,gt Go Tidy, 格式化html代码
  • :Wrap 折叠长行,这个比较有用,特别是quickfix中的提示经常跑出去了 // 好像对quickfix部分不起作用 -_-
  • Cmd-/ toggle comments,在Linux下使用alt
  • gcp comment a paragraph

vim相关

,vr 重新加载vim, vim reload

A标签默认是inline元素,所以标签内容的长短决定了鼠标hover的范围,在有些时候,比如某些导航列表中,需要hover父标签(li)时能hover到a标签。

在制作一个API文档的侧边栏导航列表的时候,html大概是这样的

<div class="toc-macro absolute">
<ul class="toc-indentation">
<li><a href="#id-1">1. 绑定手机号</a></li>
<li><a href="#id-2">2. 查询手机号码是否可以绑定</a></li>
<li><a href="#id-3">3. 添加邮箱</a></li>
<li><a href="#id-4">4. 检查邮箱是否可以添加</a></li>
</ul>
</div>

其他的样式就不具体写了,其实现的效果是在右侧边栏实现一个列表导航。一些主要的样式大概如下:

.toc-macro{ position: fixed; top: 100px; }
.toc-macro ul {list-style-type:none; }
.toc-macro a { text-decoration: none; }
.toc-macro li { padding: 6px 8px 2px;text-decoration:none; }
li:hover { background-color: #efefef;color: #7DB75C; }
.toc-macro a:hover { background-color: #efefef;color: #7DB75C; }

其中使用了决定定位时导航不会随着滚动条而滚动,使我们在查看API文档时总是能看到这个导航。
这样子基本符合我们的需求了,但是有一个小小的问题,那就是鼠标放到导航上如果没有放到a链接上面,li标签会变色,但是由于鼠标没有在a上所以还是箭头的形状。。。这个小小的瑕疵需要解决一下。

首先我们想到的是把a标签的宽度设置到 100%:

.toc-macro a { display:inline-block; width: 100%; }

但是这样似乎并没有按照我们所想的表现出来。我们需要再加一些东西,让a标签的inline-block可以把宽度填充

.toc-macro li { vertical-align: middle; line-height: 15px;}

另外还有一种实现思路那就是把div下所有标签的display属性设置为block,同时a的height设置为100%:

.toc-macro ul { display: block; }
.toc-macro li { display: block;}
.toc-macro a { display:block; height:100%; }

这样实现应该也是可行的,不过没有测试过了。

一些vim插件需要提供Lua支持,特别是常见的补全插件,前段时间安装的[yadr](https

下载源码

首先,编译安装嘛,先下载源码, 可是呢这两sourceforge挂掉了,vim是托管在sf上的,导致下载页面也不能访问了,甚至vim的官网 www.vim.org 也不能访问了,幸好vim在github上有一个备份 https://github.com/vim/vim 或者直接访问vim.org的ftp站: ftp://ftp.vim.org/pub/vim/Unix/

// 使用下面之一的方法下载源码
// git下载的话体积会大一些,好处是以后可以方便地更新
git clone git@github.com:vim/vim.git
wget -O ftp://ftp.vim.org/pub/vim/Unix/vim-7.4.tar.bz2
wget ftp://ftp.vim.org/pub/vim/Unix/vim-7.4.tar.bz2

tar xjvf vim-7.4.tar.bz2
cd vim74

编译

vim的编译其实很简单,就configure->make->make install 这样的流程。但是要添加 Lua支持,就有一些麻烦了。

configure的配置大概是这样的:

./configure --prefix=/data/vim74 --with-features=huge --with-luajit --enable-luainterp=yes

首先如果不在 configure配置那手动打开 --enable-fail-if-missing 这个选项,你会发现,configure没有问题,make没有问题,make install也OK,但是运行生成的vim: vim --version会发现Lua前面还是一个”-“(表示没有Lua支持)
因为其实configure那根本就没有找到lua的支持,只是默认跳过了 --enable-luainterp=yes 选项。。。
所以应该这样运行configure:

./configure --prefix=/data/vim74 --with-features=huge --with-luajit --enable-luainterp=yes --enable-fail-if-missing

如果你的机器没有安装lua 和luajit的话会在检查lua支持那里中断了。

安装Lua和LuaJit

Lua的安装倒是比较方便,官方repo里面就有,当然要想安装新版的也可以自己编译安装。

sudo yum install lua lua-devel -y

luajit不在centos的官方repo里面,我们需要编译安装;

wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar -xzvf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
// 使用默认安装路径
make
sudo make install

编译安装

安装好lua支持后,再运行configure就不会报错了

./configure --prefix=/data/vim74 --with-features=huge --with-luajit --enable-luainterp=yes --enable-fail-if-missing
make
sudo make install

运行

运行编译的vim:

/data/vim74/bin/vim

可能你会发现这样的错误:

/data/vim74/bin/vim: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory

显然是安装的luajit有问题。我们找一下luajit这个.so文件在哪里

sudo find / -name libluajit-5.1.so.2

发现下面有这个文件:

  1. /home/wuxu/tars/ngx_openresty-1.7.10.2/build/luajit-root/data/openresty/luajit/lib/libluajit-5.1.so.2
  2. /usr/local/lib/libluajit-5.1.so.2
  3. /data/openresty/luajit/lib/libluajit-5.1.so.2

显然1,3是openresty编译的,第二个才是我们安装luajit支持,我们需要给这个.so生成一个软链接,让vim能找到它:

sudo ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2

这样再运行vim就不会有问题了~也有Lua支持了,不过Vim的自动补全还没用过呢,学会了再做记录吧。

前段时间去php.net上闲逛发现PHP7的beta1版本出来了,就尝试着编译安装了一下

之前在鸟哥的博客里看到了他们做的PHP的性能测试,相对于PHP5.6都是有很大的提升的,并且PHP的主版本号已经是2004年发布PHP5后,11年来首次更新,肯定PHP7是有很大的改变的,下面那就来试试PHP7的beta版吧,正式版大概在今年年底会发布。

下载源码

测试版本的PHP下载页面: https://downloads.php.net/~ab/

php7 beta1: https://downloads.php.net/~ab/php-7.0.0beta1.tar.gz

wget https://downloads.php.net/~ab/php-7.0.0beta1.tar.gz
或者
curl -O https://downloads.php.net/~ab/php-7.0.0beta1.tar.gz
阅读全文 »

vim作为键盘操作为主的编辑器,有许多功能丰富的快捷键,其实不只在普通模式下有快捷键,其实在插入模式下也有一些有用的快捷键…

插入模式的快捷键

对于新手来说,vim的插入模式和记事本一样“好用”,记事本有一些快捷键,但是在vim的插入模式下,我们却经常忘记使用快捷键:

<C-h>/Ctrl+h	 删除前一个字符
<C-w> 删除前一个单词
<C-u> 删除到行首

Esc/<C-[> Esc进入普通模式,其实Ctrl+[和Esc的作用是一样的
<Ctrl-o> Ctrl+o进入插入-普通模式,此模式下可以执行一个普通模式下的命令并返回插入模式,
常用 <C-o>zz:保持插入模式并把光标行滚动到屏幕中间

可以在插入模式下使用vim的计算工具<C-r>= 插入模式下这个组合键访问表达式寄存器(=),这是会在屏幕下方提示输入运算符,输入1+2+3<CR>(回车),vim就会把运算结果插入到刚刚的光标位置,并且仍然是插入模式

对于104键的键盘可以在插入模式下使用Shift+insert组合键粘贴系统剪切板的内容,可以使用<C-r>n粘贴寄存器n中的内容

在插入模式下 <C-v>用来插入一个特殊字符,比如<C-v>u00bf可以插入一个返过来的问号~这是用来插入unicode字符的。

可视模式下的快捷键

普通模式下的快捷键

分栏

sp {filename} 水平切分上下两栏。filename可选,默认当前文件,快捷键<C-w>s
vsp {filenamem} 垂直切分,左右两栏 <C-w>v

如果安装了yadr扩展的话可以使用contrl+h,j,k,l来跳转到相应方向的分栏
没有yadr可以使用快捷键 <C-w><C-w>在分栏中循环切换,或这使用<C-w>[h,j,k,l] 跳转到分栏。

<C-w>= 所有窗口等宽等高
<C-w>_ 最大化活动窗口高度
<C-w>| 最大化活动窗口宽度
[n]<C-w>_ 活动窗口高度设为n
[n]<C-w>| 活动窗口宽度设为n

:clo 关闭活动窗口, 快捷键 <C-w>c
:on[ly] 只保留当前窗口 快捷键 <C-w>o

很有用的重新对其代码,命令模式下 gg=G
待续