2010年1月4日星期一

vim的高级功能

1、录制功能
有时候,我们需要对每一行做同样的工作,例如:编写脚本时,为了测试程序,有时候需要注释掉很多行,但是显然,如果一行一行的去在头部添加一个#来注释,显然无法忍受,这是就可以使用录制功能了
在命令模式下,按下q键,然后按下一个0-9
a-z键,这个字母或数字代表记录的名字。然后开始对某一行操作,操作完成后,再按下q键。完成记录
使用记录:输入 重复次数@名字 即可
2、自定义快捷键
在命令模式下输入
:map 快捷键 操作
例如输入 :map <F2>
I#<esc>j即可在行首插入#并且光标下移一行。如果使用10+<F2>键就会执行10次,和上面一样的效果
取消快捷键定义,在命令模式下输入:unmap 快捷键

注意:这种设置的快捷键只有在当前vim有效,退出后即无效!可以将快捷键设置在.vimrc中
3、注释掉某些行
:1,10s/^/#/g
上面的命令在1~10行之前添加一个#,就注释掉了,这里注意^表示行首,而$肯定表示行尾。果然是!
同样,注释C语言要使用转义
:1,10s/^/\/\//g
4、神奇的ab命令
在上面我们见识了使用map来定义快捷键,但是定义太多时,就不好记了,这是可以使用"ab"命令
:ab 简写 代替简写的文本
例如我们输入:ab email leisure512@gamil.com
以后我们每次在文本中输入email,按下空格等后email就会自动变成leisure512@gmail.com,但是使用还是有点困难,因为要事先预测好。
5、在vim中使用shell命令
格式:$!command即可
6、导入其它文件内容到当前文本
:r filename
将文件的内容导入到当前光标处!
7、将导入和Shell命令一起使用
有时候我们想导入shell命令的结果,如插入当前系统时间
格式:r !command

让你的vim支持系统剪贴板

我的博客文章发贴过程:
1. 在vim里面写原创文章,或者转帖自己看到的经典文章;
2. 在vim里面写好之后,排好版,然后,快捷键操作:gg, shift+V, shift + G,
"+y,解释:"+y是把选中内容复制到系统剪切板里
3. ctrl + M 打开opera mail,粘贴之;
4. 写好主题,直接发送到我的blogger博客关联邮箱;

ok, 一篇文章完成了。

所有的剪切、复制、粘贴操作都在vim寄存器+和系统剪切粘贴板之间切换完成。vim的寄存器+是和系统剪切板关联的,即:
"+y 复制到系统剪切板
"+p 把系统粘贴板里的内容粘贴到vim

可惜的是,ubuntu 和mint
默认安装的vim是不支持系统剪切版的,需要执行以下安装:
sudo apt-get instal vim-full
sudo apt-get instal vim-gnome
sudo apt-get instal vim-gui-common

2010年1月3日星期日

常用Shell快捷键

按键 动作
Ctrl+a 移动到行首
Ctrl+e 移动到行尾
Ctrl+b 光标往左移动一个字符
Ctrl+f 光标往右移动一个字符

Ctrl+c 终止进程
Ctrl+z 挂起进程

Ctrl+l /clear 清屏
Ctrl+h 删除光标前一个字符
Ctrl+d 删除光标后一个字符

Ctrl+u 剪切到行首
Ctrl+w 剪切前一个单词
Ctrl+k 剪切到行尾
Ctrl+y 粘贴剪切的,不能粘贴系统剪贴板

Ctrl+p 前一条命令
Ctrl+n 后一条命令

VIM复制粘贴系统剪贴板

在VIM中的命令模式下输入
:reg
显示VIM的寄存器,记录了以前复制的东西,可以记录10多次,而怎么使用呢?
在命令模式下输入"4p即可粘贴"4的内容
系统剪贴板的编号是"+,所以当从系统剪贴板中粘贴内容到VIM时,可以使用"+p来实现,也可以使用Shift+Insert键
同样,要想将VIM中的东西复制到系统剪贴板,则使用"+y

linux 关机——重启命令

1、shutdown
shutdown [选项] [时间] [message]
-h 关机
-r 重启
-c 取消一个正在执行的shutdown动作
-k 只发送message,而不真正的shutdown
[时间] 18:00(hh:mm),now,+5(分钟)等格式
2、halt
关机指令,会调用shutdown来关机
使用-f来强行关机,不调用shutdown
3、poweroff
4、init 运行级别
通过使用init来修改系统运行的级别,0(关机)6(重启)
使用runlevel可以查看当前运行的级别

ubuntu9.10中配置grub1.97

在ubuntu9.10(karmic
koala)中配置grub1.97,grub1.97是ubuntu9.10发行是默认的,如果需要使用以前老的grub0.97,可以自己手动安装,运行

$sudo apt-get install grub

即可,然后运行

$sudo update-grub

就会检测系统上的系统,生成/boot/grub/menu.lst文件。但是可能不能检测出其它系统,如windows,不过menu.lst文件中有配置好的windows启动项,只需要取消注释即可,或者根据自己的需要修改一下windows装在哪个分区。

下面说一下grub1.97的配置,配置中会用到的文件和目录如下,以前修改grub0.97的时候都是自己直接去修改menu.lst,现在grub1.97推荐修改以下几个文件,然后运行update-grub命令来生成grub.cfg文件,而不是直接去修改grub.cfg。

/etc/default/grub

/etc/grub.d/00_Header

/etc/grub.d/05_debian_theme

/etc/grub.d/40_custom

首先,/etc/default/grub文件设置了grub最基本的配置,如默认启动项,等待时间,分辨率等,可以按照自己的需要修改。分辨率最好是安装vbeinfo命令的输出来设置,vbeinfo命令可以在grub
shell中运行,也就是你开机的时候出现菜单的时候按下c键,进入一个grub
shell,这里运行vbeinfo后你可以看到支持的分辨率。

然后,/etc/grub.d/00_Header文件设置grub.cfg文件中的Header部分。也是配置grub背景显示效果的地方,这里可以设置grub的背景/前景色,以及大家都感兴趣的背景图片,其中一段大概如下(因为我修改过)

view plaincopy to clipboardprint?
# check for usable backgrounds
use_bg=true
if [ "$GRUB_TERMINAL_OUTPUT" = "gfxterm" ] ; then
#添加了jpg文件,因为下面case语句中都有jpg,而且这里可以添加一些你自己的目录
for i in
{/boot/grub,/usr/share/images/desktop-base}/moreblue-orbit-grub.{png,tga}
; do
if is_path_readable_by_grub $i ; then
bg=$i
case ${bg} in
*.png) reader=png ;;
*.tga) reader=tga ;;
*.jpg|*.jpeg) reader=jpeg ;;
esac
if test -e /boot/grub/${reader}.mod ; then
echo "Found Debian background: `basename ${bg}`" >&2
use_bg=true
break
fi
fi
done
fi

上面的第二行use_bg,原来等于false,其实不改成true也可以,因为下面的脚本会检查背景文件

for i in
{/boot/grub,/usr/share/images/desktop-base}/moreblue-orbit-grub.{png,tga};do

........

这段脚本是在指定目录/boot/grub,/usr/share/images/desktop-base下查找背景文件moreblue-orbit-grub.*,这里后缀名可以是png,tga,看下面的case语句,可以知道你还可以加入jpg文件,这里的目录:你可以加入你的目录到搜索路径中,文件moreblue-orbie-grub可以修改成你喜欢的名字,后缀名,可以使用png,tga,jpg,最后可能如下:

for i in {/boot/grub , /usr/share/images/desktop-base ,
/usr/mypictures}/grub-background.{png,tga,jpg};do

case语句之后,会检查是否存在支持的模块,在/boot/grub/目录下有很多模块,都以.mod结尾。

其次,你可以修改文件/etc/grub.d/40_costom文件来添加自己的系统启动项,如windows系统,我在这里添加了gentoo系统的启动菜单。因为在30_os-prober阶段中已经自动检测到了windows。所以不用自己动手了。

最后,执行

$sudo update-grub命令来生成/boot/grub/grub.cfg文件

下面说说问题:

在我的电脑上,启动后,grub背景和分辨率都没有任何改变,我不知道这是为什么,然后我进入grub
shell,输入background_image命令后,提示error: no video mode activated.

运行vbeinfo命令,可以看到支持的分辨率,设置正确,但是分辨率一样很低,根本没有改变。

运行915resolution mode 1024 768设置分辨率,提示:unrecognized number

运行915resolution命令可以查看到系统芯片组是945GM,但是使用915resolution
-c 945GM时,却提示error: unknow argument
'-c',看看915resolution的usage就知道,它明明提供了-c选项!

所以,真不知道该说什么好!以前ubuntu-9.04(jaunty)的时候也使用grub1.97,背景,分辨率设置都好好的,真是郁闷!

Linux下查看UUID方法

1. sudo blkid
/dev/sda1: UUID="9ADAAB4DDAAB250B" TYPE="ntfs"
/dev/sdb1: UUID="B2FCDCFBFCDCBAB5" TYPE="ntfs"
/dev/sdb5: UUID="46FC5C74FC5C5FEB" TYPE="ntfs"
/dev/sdb6: TYPE="swap" UUID="2cec6109-5bcf-45a3-ba1b-978b041c037f"
/dev/sdb8: UUID="9ee6f22d-b394-422c-9b4a-1525a3220942" SEC_TYPE="ext2"
TYPE="ext3"
/dev/sdb7: UUID="4bcb9381-6e25-4304-8743-f882039ff3ad" TYPE="ext3"

2. ls -l /dev/disk/by-uuid
lrwxrwxrwx 1 root root 10 2008-05-15 22:37
2cec6109-5bcf-45a3-ba1b-978b041c037f -> ../../sdb6
lrwxrwxrwx 1 root root 10 2008-05-15 22:37 46FC5C74FC5C5FEB -> ../../sdb5
lrwxrwxrwx 1 root root 10 2008-05-15 22:37
4bcb9381-6e25-4304-8743-f882039ff3ad -> ../../sdb7
lrwxrwxrwx 1 root root 10 2008-05-15 22:37
9ee6f22d-b394-422c-9b4a-1525a3220942 -> ../../sdb8

3. sudo vol_id /dev/sda1
ID_FS_USAGE=filesystem
ID_FS_TYPE=reiserfs
ID_FS_VERSION=3.6
ID_FS_UUID=be6d8295-a1c4-48e9-b68d-f4b043cd5f2c
ID_FS_UUID_ENC=be6d8295-a1c4-48e9-b68d-f4b043cd5f2c
ID_FS_LABEL=
ID_FS_LABEL_ENC=
ID_FS_LABEL_SAFE=