学习vim,标记一下

 模式行(modeline)

没人愿意每次都手工输入一大堆的 Tab 和缩进设定。可是,放在 .vimrc 文件中似乎也不是个好主意:如果我编辑的代码不止一种风格呢?——考虑一下,如果你参加开源软件项目,你能保证你参加的所有项目,还有你公司里的软件项 目,代码风格都一样吗?——Vim 是我用过的第一个支持在文件中记录代码风格设定的编辑器。这个特性在 Vim 中叫做模式行,实际上,它所做的是在打开文件时根据文件中的 Vim 指令设定相关的 Vim 选项。下面就是一个嵌在 C 源代码中的模式行:

 

/* vim: set tabstop=4 shiftwidth=4 expandtab: */

 

模式行有好几种形式。本文只介绍上面的这种形式(其它形式类似,请自行参考“:help modeline”):行首的“/*”和尾部的“*/”告诉 C 编译器这是一行注释,不是代码的一部分;而 Vim 可通过后面的“vim:”识别出模式行的开始(必须出现在行首或前面有一个空白字符);后面则是“set”和空格间隔开的一串 Vim 选项;“:”表示模式行结束。

这种方式非常简单,功能也非常强大。另外请注意,出于安全的考虑,模式行中的选项只影响当前文件(“:help modeline-local”),也不能做任何设置选项以外的工作。

 

 

搜索、替换和正则表达式

大家应该都已经知道 Vim 里使用“/模式”(或“?模式”)进行搜索,使用“:s/模式/字符串/标志”进行替换,其中的“模式”是一个正则表达式。关于正则表达式,不熟悉的话可 以边用边学,本节也不打算对 Vim 的正则表达式作完整的阐述(那可能可以专门写一本小册子了),而只抛砖引玉式地给出一些有用的例子加以说明,以及一些实用技巧。

先说一点点搜索。搜索里最最有用的一个快捷方式是“*”(向下完整匹配光标下的单词)。把光标移动到你要搜索的词(变量名、函数名等)上,比如 “test”,然后按“*”,Vim 将自动产生一个对“\<test\>”(参见“:help /\<”和“:help /\>”)的搜索,也就是说,搜索完整的单词“test”。不要小看这个技巧,它经常可以大幅度地提高搜索的速度。事实上,这是 Vim 网站上公布的第 1 号技巧,也是被评价最高的技巧。相似的技巧还有“#”(向上完整匹配光标下的单词)、“g*”(向下部分匹配光标下的单词)等,请自行查看(“:help #”等)。

Vim 在搜索和替换时会对匹配成功的文本进行加亮,在已经完成搜索和替换任务后,这种加亮有时反而会妨碍显示。Vim 专门提供一个命令取消这种加亮(直到用户再一次使用搜索或替换命令):“:nohlsearch”。建议用户创建一个键盘映射(key mapping)加入到 .vimrc 中,如:


nmap <F2> :nohlsearch<CR>

以上命令表示,在正常模式下按 F2 键相当于输入“:nohlsearch”后面跟一个回车,即取消搜索加亮显示。

再看几个搜索替换的实用例子。

  • 去掉所有的行尾空格:“:%s/\s\+$//”。“%”表示在整个文件范围内进行替换,“\s”表示空白字符(空格和制表 符),“\+”对前面的字符匹配一次或多次(越多越好),“$”匹配行尾(使用“\$”表示单纯的“$”字符);被替换的内容为空;由于一行最多只需替换 一次,不需要特殊标志。这个还是比较简单的。
  • 去掉所有的空白行:“:%s/\(\s*\n\)\+/\r/”。这回多了“ \(”、“\)”、“\n”、“\r”和“*”。“*”代表对前面的字符(此处为“\s”)匹配零次或多次(越多越好;使用“\*”表示单纯的“*”字 符),“\n”代表换行符,“\r”代表回车符,“\(”和“\)”对表达式进行分组,使其被视作一个不可分割的整体。因此,这个表达式的完整意义是,把 连续的换行符(包含换行符前面可能有的连续空白字符)替换成为一个单个的换行符。唯一很特殊的地方是,在模式中使用的是“\n”,而被替换的内容中却不能 使用“\n”,而只能使用“\r”。原因是历史造成的,详情如果有兴趣的话可以查看“:help NL-used-for-Nul”。
  • 去 掉所有的“//”注释:“:%s!\s*//.*!!”。首先可以注意到,这儿分隔符改用了“!”,原因是在模式或字符串部分使用了“/”字符,不换用其 他分隔符的话就得在每次使用“/”字符本身时写成“\/”,上面的命令得写成“:%s/\s*\/\/.*//”,可读性较低。命令本身倒是相当简单,用 过正则表达式的人估计都知道“.”匹配表示除换行符之外的任何字符吧。
  • 去掉所有的“/* */”注释:“:%s!\s*/\*\_.\{-}\*/\s*! !g”。这个略有点复杂了,用到了几个不太常用的 Vim 正则表达式特性。“\_.”匹配包含换行在内的所有字符;“\{-}”表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的 字符数越少越好;标志“g”表示一行里可以匹配和替换多次。替换的结果是个空格的目的是保证像“int/* space not necessary around comments */main()”这样的表达式在替换之后仍然是合法的。

希望上面的这些简单的例子能够引起你使用 Vim 的正则表达式高效完成任务的兴趣。进一步的信息可参考“:help regexp”。

 

出自:www.ibm.com/developerworks/cn/linux/l-tip-vim1/

 

 

应对mysql root密码遗忘

在my.cnf的[mysqld]字段加入:

 

skip-grant-tables

然后重启你的mysqld。这样,登录就不用密码了.

然后进入mysql执行

 

UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';

成功后

 

FLUSH PRIVILEGES;

最后去掉my.cnf中的skip-grant-tables

重启mysqld。

修改键盘映射,用Windows®键启动KDE主菜单

 KDE 的快捷键只允许非修饰键(Modifier Key)和 组合键,Windows® Key 恰恰是修饰键,直接绑定 Windows® Key 是不可行的。

一个更改键盘映射de技巧,使 Windows® Key 绑定到 KDE 4.3 的 KickOff 菜单上。

 

第一步,找到 “Windows® 键”对应的Key code。

$xev 然后按下 “Windows® 键”,观察输出,如

KeyPress event, serial 34, synthetic NO, window 0×4800001,

root 0×13b, subw 0×0, time 18882804, (-418,114), root:(659,139),

state 0×0, keycode 115 (keysym 0xffca, F13), same_screen YES,

XLookupString gives 0 bytes:

XmbLookupString gives 0 bytes:

XFilterEvent returns: False

得到 115 是“Windows® 键”的Key code。

 

第二步,导出键盘映射方案。

$xmodmap -pke > ~/.Xmodmap 导出。找到 keycode 115 =一行,修改等号后的数据为一个键的映射。注意防止冲突,比如修改成F13(键盘上并不存在的键)。

 

第三步,应用新键盘映射方案。

$xmodmap ~/.Xmodmap 导入修改后的方案。

 

第四步,右击 KickOff 程序起动器,配置其属性。将快捷键改为“Windows® 键”(显示为F13),这样就把“Windows® 键”绑定到KickOff 菜单上了。

 

 

学习自:blog.gmsh.pp.ru/2009/08/tips-make-win-key-useful-in-kde/

linux下用mencoder转换视频

没有windows,于是想酷酷的来一段命令。可是mencoder那长长的man页彻底的打击到我。

上网搜了搜,果然有现成的。研究过后再稍加修改,嘿嘿~!

经试验,在我的E2上用zmplayer完美播放。就是视频好像没怎么压缩....下次再找几个视频试试!!

留个记号先:

mencoder -srate 22050 -stereo 0 -ofps 15 -vf scale=320:-3 -sws 9 \
-oac mp3lame -lameopts mode=2:cbr:br=128 \
-ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=320 <源文件> -o  <输出文件>

参数无非是视频和音频两个方面。

第一行(杂项): -srate 音频输出取样率,不知所云,照抄;-stereo 立体声音频输出;

-ofps 视频每秒帧数,一样不懂;

 -vf 是输出视频滤镜,这里利用它来缩小画面。scale=320:-3 意思是“把320当视频宽,再按源视频比例缩放;-sws 选压缩算法

第二行(音频):大意是“选择mp3lame音频编解码器,并且输出恒定比特率为128kbps的立体声”

第三行(视频):大意是“选择lavc视频编解码器,输出比特率为320kbit的mpeg4格式视频(vhq不知所云)”

 

 

Magic SysRq key

无意中发现这篇《linux 死机了怎么办》,感觉挺好玩的。google了下,在wikipedia找到详细的介绍。凭借我3.5级的E文水平,整理出来和大家分享。

 

Magic SysRq key 是linux内核提供的一组按键序列。他们对应一些系统的底层操作,能够在software debug和系统应急方面发挥作用。

要用上这个Magic key,有三个基本条件:

  1. 键盘上有SysRq键;(呵呵...)
  2. 所使用的内核,在编译时打开了CONFIG_MAGIC_SYSRQ选项;
    # 验证方法
    grep -F CONFIG_MAGIC_SYSRQ /boot/config-`uname – r`
    # y表示已开启
    CONFIG_MAGIC_SYSRQ=y
  3. 系统配置Magic key为可用。
    #查看/etc/sysctl.conf,确认
    kernel.sysrq = 1
    #如果先前为0,更改配置后使用以下代码激活
    sysctl -p

使用方法:按住Alt和SysRq键,再逐次按下相应功能键(详见下表)。

公式:Alt + SysRq + 相应功能键(或者按键序列)

按下之前要看清键盘布局,不同的布局按键序列不同。而且按按键序列时,每个功能键之间应该间隔一定时间。

话说通常的键盘SysRq键和截屏键(Print Screen)合在一起。

Action QWERTY Dvorak AZERTY
Set the console log level, which controls the types of kernel messages that are output to the console 0 through 9 0 through 9 0 through 9
(without using shift)
Immediately reboot the system, without unmounting partitions or syncing b x b
Reboot kexec and output a crashdump c j c
Display all currently held Locks d e d
Send the SIGTERM signal to all processes except init (PID 1) e . e
Call oom_kill, which kills a process to alleviate an OOM condition f u f
When using Kernel Mode Setting, provides emergency support for switching back to the kernel's framebuffer console[3] g i g
Output a terse help document to the console
Any key which is not bound to a command should also do the trick
h d h
Send the SIGKILL signal to all processes except init i c i
Kill all processes on the current virtual console (Can be used to kill X and svgalib programs, see below)
This was originally designed to imitate a Secure Access Key
k t k
Show a stack backtrace of all currently executing tasks l n l
Output current memory information to the console m m ,
Reset the nice level of all high-priority and real-time tasks n b n
Shut off the system o r o
Output the current registers and flags to the console p l p
Display all active high-resolution timers and clock sources. q ' a
Switch the keyboard from raw mode, the mode used by programs such as X11 and svgalib, to XLATE mode r p r
Sync all mounted filesystems s o s
Output a list of current tasks and their information to the console t y t
Remount all mounted filesystems in read-only mode u g u
Output Voyager SMP processor information v k v
Display list of blocked (D state) tasks w , z

针对系统僵死,需要重启的情况,前人总结了两套功能键按键序列。

一、

unRaw      将键盘控制从 X Server 那里抢回来
 tErminate 给所有进程发送 SIGTERM 信号,让他们自己解决善后
 kIll      给所有进程发送 SIGKILL 信号,强制他们马上关闭
  Sync     将所有数据同步至磁盘
  Unmount  将所有分区挂载为只读模式
reBoot     重启

* 记为buisier的反序(busy的比较级),时间控制:R – 1 秒 – E – 30 秒 – I – 10 秒 – S – 5 秒 – U – 5 秒 – B

* 摘自blog.upsuper.org.cn/what-to-do-if-linux-crash/

二、

"Raising Skinny Elephants Is Utterly Boring"

两套序列功能一致,都是尽量让系统的关机正常化。不同在于选择Sync的时机。

 

 

话说评论对Magic key用在系统应急上很是不屑,因为很多发行版默认都不开启这项功能。原因是避免快捷键冲突和安全方面的考虑。看来这个又是“砖家"的“砖利”!

感兴趣的同学可以看看这里www.ibm.com/developerworks/cn/linux/l-cn-sysrq/index.html