vi技巧: 宏的使用技巧

本文所用命令的帮助入口:

:help q
:help @
:help :let-@ 

网友Karl问

再请教一下:我想在.vimrc中设置一个宏,请vi启动的时候就有这个宏,应该怎么办?

其实在vim中所谓的宏就是把一串命令放到了指定的寄存器里。所以要实现Karl的需求,可以这样做:先录制好宏后,然后在vimrc里把这个宏中的命令放到指定寄存器里,这样vim启动后就可以直接使用这个宏了。

具体的做法如下:

第一步:首先录制宏,Easwy以插入三行文字做为一个简单的例子。这三行文字是:

================================
I love vim. Happy vimming!
================================ 

qu开始录制,录制完成后再按一个q命令结束,这样就把宏录制到寄存器u中了。

现在我们可以查看一下u寄存器的内容,用命令“up,把u寄存器的内容粘贴出来:

32i=^[oI love vim. Happy vimming!^M^[32i=^[ 

注意,上面的^[实际上是<ESC>键的键码,同样,^M是换行键<CR>的键码,在vim中它们以特殊的颜色被显示出来,如果你把光标在它们上面移过,你会发现它们虽被显示成两个字符,但实际上只是一个。

第二步:现在我们用下面的命令在.vimrc中输入一行:

<ESC>olet @m = "<ESC>"upa"<ESC> 

这行命令实际上在.vimrc加入了这行话:

let @m = “32i=^[oI love vim. Happy vimming!^M^[32i=^[”

第三步:现在你重启vi,然后直接输出下面的命令:

@m 

怎么样,宏是不是生效了?!

要想了解更多细节,请阅读文章开始处给出的帮助手册。

更多关于vi/vim的内容,请阅读易水博客上的其它文章。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/vi-tip-of-using-recording/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Linux下常用程序的代理服务器(proxy)配置

Linux下有很多程序都只有命令行接口,对于这类程序,它们通过代理服务器(proxy)访问网络的方式也不尽相同。在本文中Easwy总结了一些常用Linux程序配置代理服务器的方法。

[ 通用代理服务器配置 ]

对于大多数Linux控制台程序,例如Debian或Ubuntu中的apt-getaptitude命令、git命令、wget命令,这些程序都使用http_proxyftp_proxy环境变量来获取代理服务的配置。

方法是在你的~/.bashrc里加上类似下面的话:

export http_proxy=http://username:password@proxyserver:port/
export ftp_proxy=http://username:password@proxyserver:port/ 

如果你的代理服务器需要用户名和密码才能访问,需要填写上面的username和passwd部分,否则的话,省略这两部分。

例如,假设你的代理服务器为192.168.1.1,端口是8080,用户名为easwy,密码是123456,那么应该这样设置这两个环境变量:

export http_proxy=http://easwy:123456@192.168.1.1:8080 
export ftp_proxy=http://easwy:123456@192.168.1.1:8080 

这样配置之后,退出再登录一次,或者直接使用下面的命令source一下.bashrc:

source ~/.bashrc

现在,上述程序就可以通过代理服务器访问网络了。

[ subversion的代理服务器配置 ]

要配置subversion的代理服务器,需要修改$HOME/.subversion/servers文件,在此文件的[global]段加上:

http-proxy-host = 192.168.1.1
http-proxy-port = 8080 
http-proxy-username = easwy
http-proxy-password = 123456 

现在svn就可以使用代理服务器访问版本库了。

[ yum的代理服务器配置 ]

如果想让CentOS中的yum可以通过代理服务器更新程序,则需要修改文件/etc/yum.conf,在此文件中加上:

proxy=http://easwy:123456@192.168.1.1:8080

现在使用yum就可以更新你的软件了。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/proxy-setting-on-linux-console/

文章的脚注信息由WordPress的wp-posturl插件自动生成

vi在启动时没有响应问题的解决

最近Easwy在某台服务器上启动vi时,总出现vi没有响应的情况。 现象是输入vi命令后,vi窗口显示不出来,并且此时终端也没有响应,不能输入任何命令。只能用ssh再登录一个终端,在新登录终端上使用kill命令杀死此vi进程,此时运行vi的终端中显示如下信息:

*** info [lib/liblow.c(329)]:
/dev/gpmctl: Interrupted system call
*** err [lib/liblow.c(336)]:
/dev/gpmctl: No such device or address
Vim: Caught deadly signal TERM
Vim: Finished.
Terminated 

在偶然中发现,使用putty登录这台服务器时,运行vi命令没有问题。因此怀疑和TERM环境变量的设置有关。检查putty中此环境变量:

$ echo $TERM
xterm 

而在vi没响应的终端里,TERM环境变量的值为:

$ echo $TERM
linux 

如果把TERM环境变量的值也改成xterm,那么vi可以正常启动。看来的确是TERM环境变量引起的这个问题。后来又发现,如果在linux screen中启动vim的话(此时TERM环境变量的值为screen),vim也不能正常启动。

那么为什么TERM环境变量的取值会影响vim的启动呢?经过认真排查,终于把问题定位到vimrc中的一个设置上:

set mouse=a 

如果在.vimrc中设置了set mouse=a,那么在TERM环境变量为linux或screen的终端上,vi启动时就会没有反应;如果去掉这个设置,不管TERM环境变量的取值是什么,vi都能正常启动。

阅读了vim的帮助手册,手册中说,这个选项只在一些特定类型的终端上支持,比如xterm、使能了gpm的linux终端等。看来问题是出在gpm上,从上面vim被kill后的打印中也可以看出,是/dev/gpmctl设备无法访问导致vi失去反应的。

后来在vimrc中把set mouse=a一句去掉,vi终于正常了。如果有其它朋友也遇到类似的问题,不妨试一下上述解决方案。

更多关于vim的内容,请阅读Easwy的博客上的其它文章。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/vim_no_response_when_term_type_is_linux/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Easwy的博客正在测试新主题

Easwy博客近期将会对新主题进行测试,如果对大家访问带来不便,在此表示歉意。

另外也请大家反映新主题存在的问题。

谢谢!

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/easwy-com-test-itheme_i18n-theme/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Easwy的网摘(20100122)

本文是Easwy的网摘(20100122),根据Delicious中的收藏自动生成:

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/bookmark-of-delicious-20100122/

文章的脚注信息由WordPress的wp-posturl插件自动生成

Easwy的网摘(20100121)

本文是Easwy的网摘(20100121),根据Delicious中的收藏自动生成:

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/bookmark-of-delicious-20100121/

文章的脚注信息由WordPress的wp-posturl插件自动生成

使用mvn eclipse:eclipse生成eclipse工程文件失败

刚刚使用下面的命令生成eclipse的工程文件:

mvn eclipse:eclipse 

但maven提示:

$ mvn eclipse:eclipse
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building AppFuse Struts 2 Application
[INFO]    task-segment: [eclipse:eclipse]
[INFO] ------------------------------------------------------------------------
[INFO] Preparing eclipse:eclipse
[INFO] [aspectj:compile {execution: default}]
[INFO] [native2ascii:native2ascii {execution: native2ascii-utf8}]
[INFO] [native2ascii:native2ascii {execution: native2ascii-8859_1}]
[INFO] [eclipse:eclipse {execution: default-cli}]
[INFO] Adding support for WTP version 1.5.
[INFO] Using Eclipse Workspace: null
[INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAINER
[INFO] Resource directory's path matches an existing source directory. Resources will be merged with the source directory src/main/resources
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Request to merge when 'filtering' is not identical. Original=resource src/main/resources: output=target/classes, include=[], exclude=[ApplicationResources_de.properties|ApplicationResources_fr.properties|ApplicationResources_ko.properties|ApplicationResources_nl.properties|ApplicationResources_no.properties|ApplicationResources_pt*.properties|ApplicationResources_tr.properties|ApplicationResources_zh*.properties|applicationContext-resources.xml|struts.xml|**/*.java], test=false, filtering=true, merging with=resource src/main/resources: output=target/classes, include=[applicationContext-resources.xml|struts.xml], exclude=[**/*.java], test=false, filtering=false
[INFO] ------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10 seconds
[INFO] Finished at: Tue Jan 19 13:10:19 CST 2010
[INFO] Final Memory: 28M/50M
[INFO] ------------------------------------------------------------------------ 

在网上搜了一下,似乎是maven的2.7版本eclipse插件的问题,使用下面的命令可以解决此问题:

mvn org.apache.maven.plugins:maven-eclipse-plugin:2.6:eclipse 

上面的命令会调用maven eclipse插件的2.6版本来生成eclipse项目文件,可以build正常。

更多内容,请阅读Easwy的博客上的其它文章。

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/maven-build-eclipse-project-failed/

文章的脚注信息由WordPress的wp-posturl插件自动生成

使用Synergy共享你的鼠标和键盘

公司为每个软件开发人员配置了两部计算机,一部台式机安装Linux操作系统,一部笔记本安装Windows XP。开发编程主要在Linux下,处理文档和邮件则在Windows下。

工作经常需要在两台电脑间切换,一般情况下,Easwy都是把椅子移来移去来切换,或者是使用远程桌面来从一台计算机上访问另外一台计算机,由Windows访问Linux远程桌面可以使用cygwin X server,由Linux访问Windows远程桌面可以用rdesktop。但这两种方式都不太方便,移动椅子就不说了,用远程桌面只能使用一个屏幕来做显示,不能充分利用两个屏幕。

有时需要在两台电脑间交换数据,文件共享一般使用Samba,在Windows上访问Linux的Samba服务器,或者从Linux上通过Samba访问Windows的共享目录。而少量数据的共享,例如剪切板中数据的共享则比较麻烦。

前几天同事介绍了一个很好的软件Synergy,使用这个软件,可以在多台计算机间共享一个鼠标/键盘,每台计算机都可以有自己的屏幕,可以安装相同或不同的操作系统。

Easwy马上试用了一下这个软件,立刻就喜欢上了。安装完后,Easwy把Linux台式机设置为Synergy Server,Windows XP笔记本设置为Synergy Client(因为我大多数时间在Linux下工作)。设置好后,笔记本好像变成台式机的扩展屏幕了,鼠标移出台式机的窗口右边界后,就会移入笔记本的屏幕中,而此时台式机的键盘输入就直接输入到笔记本中了。同时,两台计算机间可以共享剪切板中的数据了。在Windows上拷贝一块数据到剪切板中,鼠标移回Linux,一按中键,就粘贴在vim中了,反之亦然,非常方便。

Synergy的安装配置都很简单,首先到http://sourceforge.net/project/showfiles.php?group_id=59275&release_id=406637下载synergy,根据你操作系统的类型下载Linux或Windows的版本,下载后直接安装。

安装后需要在每台主机上运行synergy,并做相应的配置。Window上的synergy提供了图形化配置界面,Easwy配置成”Use another computer’s shared keyboard and mouse(client)”,并填入共享键盘/鼠标计算机的主机名。

Linux下需要写一个简单的配置文件,Easwy的配置文件如下:

section: screens
    szx-w-easwyy.easwy.com:
    szx-n-easwyy:
end
section: links
    szx-w-easwyy.easwy.com:
        right = szx-n-easwyy
    szx-n-easwyy:
        left = szx-w-easwyy.easwy.com
end 

把这个文件存为/etc/synergy.conf,然后在命令行下执行:

synergys -f --config /etc/synergy.conf 

这样就在前台启动了synergy服务器,之所以在前台启动是为了方便查看调试输出信息。接下来就可以测试一下效果。如果都没问题,按CTRL-C终止前台的synergy,然后把上面命令中的-f参数去掉,在后台启动synergy。你可以把启动synergy加到你的启动脚本里,例如/etc/rc.local

简单介绍一下上面的配置文件:

  • screens一节列出你打算共享同一个键盘/鼠标的主机名,需要注意的是这里的主机名必须和你计算机上hostname命令的输出一致,不然synergy就会提示找不到对应的主机。
  • links一节则列出各主机间的位置关系,上面的配置指明了Linux台式机的右边是笔记本,而笔记本的左边是台式机。这样,鼠标移出台式机屏幕的右边界就会移入笔记本屏幕,而移出笔记本屏幕的左边界后就会移回台式机屏幕了。

如果你需要特殊的配置,或者遇到了什么问题,请参见Synergy的主页。

2010/01/19更新

网友Stephenjy留言说,Synergy从2006年以来就没有更新过了,有人在Google Code上建立了新的Synergy+项目来继续维护。所以,如果你想试用,请直接下载Synergy+,网址是http://code.google.com/p/synergy-plus/。Easwy看了一下Synergy+的说明,基本是对Synergy的Bug修正,配置方法和Synergy完全一致。使用Easwy上面给出的配置,可以正常运行Synergy+。

2010/01/25更新

在CentOS 5.3上,synergy+ 1.3.4工作有问题。如果以CentOS 5.3做为server,每当把鼠标移入客户端,然后准备输入时,server端就会没有响应。只能从客户端ssh到CentOS服务器来kill掉到Synergy+ Server,CentOS上的键盘/鼠标才能恢复使用。我已经报告了此问题: Issue 342: synergy+ server is not responding,但暂时还未解决。

更多内容,请阅读Easwy的博客上的其它文章。

[ 参考文档 ]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/share-your-keyboard-and-mouse-by-synergy/

文章的脚注信息由WordPress的wp-posturl插件自动生成

也说Google退出中国

昨天看到新闻说,google有可能退出中国。今天一打开网络,扑天盖地的信息都在谈论这件事,也不禁想说两句。

Easwy不是一个Google的忠实Fans,但我是Google的一个受益者。作为一个技术人员,我通过Google获取了无数的信息。每当遇到问题的时候,第一个想起的就是到Google上搜索一下。要知道,互联网是一个庞大的信息库,要从中过滤出自己想要的信息是一件艰苦的事,借助Google,可以让这件事变得更容易。并且,对于计算机技术来说,中文的有用资源不仅溃乏,而且质量偏低,如果没有Google,也许我们会永远徘徊在低水平。

现在,出于某些原因,Google可能要退出中国,这是一件让人悲哀的事,也是让人愤懑的事。

不过,也许,或许只是也许,事情没有那么糟糕。即使Google会退出中国,可能也只是表明它会关闭google.cn这个域名、或者位于中国的办事处。我想,Google应该不会放弃网络上庞大的中文资源,以及在中国的潜在庞大用户群。

也就是说,只要www.google.com还能继续访问,我们还依旧能够使用Google提供的服务。只不过我们可能享受不到针对中国本土的一些特色服务了。

幸好,Easwy使用Google大多是查询网络上的英文资源,而且,也不会有多少人是因为针对中国的特色服务而使用Google的。

如果连www.google.com都不能访问了呢?

不敢想象,但不是没有这种可能!!

那我只能竖起中指,然后骂出一句粗口:SHIT!

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/google-intent-to-exit-china/

文章的脚注信息由WordPress的wp-posturl插件自动生成

启用两个新插件

easwy.com启用两个新插件:Postalicious和YARPP。

Postalicious插件会定期收集Easwy收藏在Delicious上的网摘,然后把它做为文章发表在博客上。

在安装这个插件前先要装上SimplePie Core插件。另外,这个插件目前对中文的支持有问题,中文字符会变成乱码。我已经给作者写过信,作者说在下一个版本中会修改。

如果你也遇到了乱码的问题,可以打开插件源文件,把文件中所有的htmlentities()函数替换成htmlspecialchars()函数。替换后就能够正常工作了。

YARPP插件是一个相关文章插件,它会根据文章标题、内容、tag、分类这些信息计算出文章的相关性并把相关度最高的文章显示出来。我试用了一下,似乎比我以前所用的相关文章插件相关度高一些。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/add-wordpress-postalicious-and-yarpp-plugin/

文章的脚注信息由WordPress的wp-posturl插件自动生成