vim 操作原石材料

Vim 用户都应该知道 Vim 的 Normal 模式下 operator + motion 组合的便利,比如

  • daw 删除光标下的普通单词以及其后的空格
  • ciW 删除光标下的以空格分隔的“单词”并进入插入模式 (i 表示 inner,不删除单词后的空格)
  • yis 复制光标下的句子到默认寄存器

确实这几个都比较平淡无奇,不过请看以下这些

  • ci[ 删除一对 [] 中的所有字符并进入插入模式
  • ci( 删除一对 () 中的所有字符并进入插入模式
  • ci< 删除一对 <> 中的所有字符并进入插入模式
  • ci{ 删除一对 {} 中的所有字符并进入插入模式
  • cit 删除一对 HTML/XML 的标签内部的所有字符并进入插入模式
  • ci" ci' ci` 删除一对引号字符 (" 或 ' 或 `) 中所有字符并进入插入模式

怎么样?ci[ ci< cit 在编辑 PHP 或者 HTML 源码时简直太爽了 (当然 matchit 插件增强的 motion % 也是必不可少的),ci" ci' ci` 几乎在编辑任何语言的源代码时修改字符串都会非常方便。不过可惜的是以上这些严格的说只能叫文本对象选择,不是 motion,因此只能跟在 v 命令或者某个 operator 后面。可恨用了两年 Vim 居然今天才想起查 Vim 帮助里的 motion.txt。 -_-b

 

使用了之后,用vim写php/html感觉效率高了很多。从上面的操作中进一步演化,还能有些实用的组合:

* vi[ 选择一对 [] 中的所有字符
* vi( 选择一对 () 中的所有字符
* vi< 选择一对 <> 中的所有字符
* vi{ 选择一对 {} 中的所有字符
* vit 选择一对 HTML/XML 的标签内部的所有字符
* vi” vi’ vi` 选择一对引号字符 (” 或 ‘ 或 `) 中所有字符

如果在选择之后,再用zf组合把它们缩成一行(folder),啊,大量的html就很好伺候了~~还有大段的php function,不在话下。

 

 

Vim/Vi一直是UNIX/Linux系统上最流行的文本编辑器,从2001年接触UNIX至今,Vim/Vi始终是我修改系统文件、编写简单程序的首选编辑器,是居家旅行必备之工具。如何提升它的编写 速度,本文着重介绍了一些使用 技巧供大家参考。

 

应用技巧一:快速注释
1 、连续行注释
使用Vim/Vi编辑shell脚本,在进行调试的时候,需要进行多行的注释,每次都要先切换到插入模式,在行首输入注释符“#”,再退回命令模式,非常麻烦。其实如果要注释连续行,可在命令模式下执行,格式如下:
:起始行,终止行s/要替换字符/替换为新字符/g
如需注释第1行到第20行,可以执行:
:1,20s/^/#/g
其中“^”表示在行首插入,“#”为要插入的字符,“g”表示执行替换时不确认,若希望每行交互询问是否执行,可将“g”改为“c”。
如果编辑PHP脚本,注释要稍微麻烦一点,如也要注释第1行到第20行,要执行:
:1,20s/^/\/\//g
PHP的注释符“//”要特殊处理,因为Vim/Vi替换命令格式中默认“/”为分隔符,这样就需要使用转义符“\”,表示“/”就要写成“\/”才可以,所以命令如上所示。
强烈建议各位看官使用,省时省力省键盘还省手指头。
2 、非连续行注释
如果注释非连续的多行,可以定义快捷键简化,格式为:
:map 快捷键 执行命令
如定义快捷键Ctrl+P为在当前行行首添加“#”注释,可以执行:
:map ^P I//<esc></esc>
“^P”为定义快捷键Ctrl+P,要注意的是必须同时按“Ctrl+v+p”按出此“^P”方才有效,或先按“Ctrl+v”再按“Ctrl+p”也可以;“I//<esc></esc>”就是此快捷键要触发的动作,“I”为在光标所在行行首插入,“//”为要输入的字符,“<esc></esc>”表示退回命令模式,“<esc></esc>”要逐个字符键入,不可直接按键盘的“Esc”键。执行成功后,直接在任意需要注释的行上按“Ctrl+P”就自动会在行首加上“//”号了非常方便。
如果要取消此快捷键,只需输入命令:
:unmap ^P
我写程序或文档喜欢在末尾注释中写上自己的邮箱,每次录入十分麻烦,索性定义了一个快捷键,如下:
:map ^M isam_helen@vip.163.com<esc></esc>
以后写完内容后,直接在注释中Ctrl+M就录入了俺的邮箱了(此处严重暴露了作者邮箱,主要期待各位看此文章的MM多多联系,对灯祷告主编大人不要删除)。
 
应用技巧二:乱七八糟的技巧
1、  传说中的命令“ ab
命令“ab”,同样可以解决上述输入邮箱的问题,因为我在Vim/Vi中定义了太多快捷键,如输入电子邮箱的、输入通信地址的、输入联系电话的、输入求偶标准的、输入PHPChina管理员三围的……后来自己都记不住了。之后一天深夜电闪雷鸣,我突然发现了这条命令——“ab”,苍天啊大地啊,我终于找到解决问题的方法了!oh yeah!
原来输入经常用的信息可以如此简单,LOOK——
:ab 替代符 原始信息
示例如下:
:ab sammail sam_helen@vip.163.com
执行之后,在输入模式任何地方录入“sammail”,再敲任意字母符号或者回车空格,咔嚓一下,利马就变成“sam_helen@vip.163.com”,那真是相当的方便啊!(原谅我此处再次暴露邮箱,声明一下,男“同志”就不要发邮件给我了,在下不好这个,谢谢)
 
2、  原来可以双剑合一
在Vim/Vi中有两个小技巧:
No.1 可以直接在Vim/Vi中执行UNIX/Linux命令不需退出Vim/Vi
有时编写一些系统脚本,需要了解系统信息,很多同学就退出Vim/Vi然后执行命令,获得信息后再进行编辑。其实大可不必,如想获得/tmp目录下内容,只需在Vim/Vi命令模式下直接执行:
:!ls /etc
查看完命令结果,直接回车,就可以继续编辑非常方便。
在Vim/Vi中执行命令,格式就是这么简单:
:!命令
No.2 可以直接将其他文件内容导入当前编辑文件中
格式:
:r 文件名
如,需要导入文件/etc/issue的内容,执行:
:r /etc/issue
两个非常非常easy的小伎俩,就在一个我非常郁闷的下午,狂敲键盘时一不小心没留神发现了这样一个小秘密——原来它们可以结合起来用!
先举个例子,很多程序员喜欢写完程序后在注释中写入当前时间,我有个好办法即省事又快速还准确,只需要在命令模式下执行:
:r !date
当前时间就自动被导入了,任何命令的结果导入到当前编辑文件中,格式为:
:r !命令
 
3、  助力编程的查询功能
以前在Linux系统下写一些C语言程序,有时记性不好,忘记了语法格式,使用Vim/Vi编写时可直接查询。如写程序写到fork时,突然失忆了(失去了对这个东东的记忆),就可以直接把光标移动到fork上,按“K”(大写的K),直接就会跳到Linux程序员手册,看到fork的帮助,看完后回车继续编写,爽啊——
 
4 、配置文件.vimrc
前面提到的快捷键、ab命令等的应用,设置后只在当前编辑文件中有效,如果想让它永久生效需要编辑用户宿主目录下的.vimrc文件,如你是root用户,则编辑/root/.vimrc(此文件默认不存在)。
写入你常用的设置命令即可,如:
:set nu
:map ^M isam_helen@vip.163.com<esc></esc>
:ab sammail limingkillyou@163.com
……
以后就永久生效了!(此处留一备用邮箱,欢迎各位MM有事没事有空没空多多联络)
 
 
 
vi是类Unix操作系统中使用极为广泛的文本编辑器之一。无论是Unix、Solaris或Linux都默认提供这个工具。可以说只要熟悉了vi,在任何一种类Unix的操作系统平台上都可以自如地进行文本编辑。关于vi的基本用法的资料有很多,本文的目的不是重复这些基本的用法,而是想给初步掌握vi基本用法的人提供一些实用技巧,使之能更快捷、高效地利用vi编辑文件。 
vi有命令模式和插入模式之分。vi启动后就处于命令模式。在命令模式下,可以随意移动光标、进行复制和粘贴文本等操作。利用“a”、“i”、“c”、“C”、“O”和“o”等命令可以从命令模式切换到插入模式。在插入模式下,可以输入文本,按Esc键切换回命令模式。为了区别不同模式下的命令,本文在介绍时会注明是何种模式下的操作。 

另外,本文的所有操作都是在Red Hat 9.0所带的vim中进行。本文介绍的各种技巧多数在各种vi版本中也都是可行的。 

加密和解密 

加密和解密文件 

在命令模式输入“:X”命令,接着输入密码、确认输入密码,最后输入“:wq”命令保存退出。文件就已经被加密了。 

经过上面方法加密后的文件变成密文文件。要阅读原来的明文,则在打开文件后,会提示用户输入密码。如果密码输入正确,就能看到原来的明文。另外可以看到,在最后的状态行上有此文件已被加密的提示。 

取消加密 

取消加密的方法很简单。在命令模式输入“:X”命令,首先会提示输入密码,这时直接敲回车键。接下来在提示重复输入密码时也直接敲回车键,最后输入“:wq”命令保存退出。这样文件的加密就被取消了。 

注意,以上加密方法是运行在Red Hat Linux 9.0上的vim中。在其它平台可能略有差异,请以实际平台或版本的帮助为准。 

替换操作 

经常用到的一些简单替换命令有: 

◆ s 将当前字符替换为一个或多个字符,例如5 s 表示将从当前字符开始的5个字符替换为一个或多个字符; 

◆ S 将当前行替换为一个或多个字符; 

◆ r 单个字符替换。 

文本格式转换 

将DOS格式文本转成Unix格式文本,命令如下: 

:1,$s/^M//g


其中^M是同时Ctrl+V+M按出来的,表示回车。 

在行首尾添加字符串 

用下列命令在文本每行的行首添加字符串“NewString”,请注意空格的存在。 

:g/^/s//NewString/g
:%s/^/NewString/g


用下列命令在每行的行尾添加字符串“NewString”: 

:g/$/s//NewString/g
:%s/$/NewString/g


从文本的第3行至最后一行的行首全部插入字符串“NewString”: 

:3,$s/^/NewString/


在整个文件中替换 

在整个文件中替换特定字符串,所用的命令如下: 

:%s/old_string/new_string/g


如果仅将文件中的第3行到第7行中的“old_string”替换成“new_string”,那么使用下列命令: 

:3,7s/old_string/new_string/


注意,其中“s”为表示替换动作,“%”表示所有行,“g”表示全文,“^”表示行首,“$”表示行尾。 

助力编程 

语法加亮 

在vi中编写程序,如果为了方便想开启语法加亮功能,只需在命令模式下输入“:syntax on”即可。同理可知,如果想关闭语法加亮功能,就在命令模式下输入“:syntax off”。 

快速查看函数帮助 

在用vi阅读和编写程序(主要是指C或C++程序)时,如果需要了解某个函数的具体功能,可以将光标移到该函数上,然后在命令模式下输入“K”,就可以调动“Linux Programmer's Manual”中对此函数的man帮助。 

标记定位 

在阅读和编写大的程序文件时,利用标记(书签)功能定位是十分有帮助的。建议大家多多使用。下面举个简单的例子进行说明。 

首先打开一个源代码文件,将光标移到想做标记的位置。假如做一个名为“debug1”的标记,那么用户可在命令模式下输入做标记的命令“mdebug1”,然后敲入回车键,一个名为“debug1”的标记就做好了。 

接下来用户可以随意将光标移到其它的位置,当在命令模式下输入“`debug1”后,就能快速回到“debug1”的标记所在行的行首。 

“ctags”命令 

在阅读和编写C或C++程序时,可用“ctags”命令对当前目录下的C源程序进行扫描。命令如下: 

$ ctags *.c


上面一条命令将为当前目录下的.c文件生成tags文件,然后使用“ta 函数名”命令来快速打开相应函数所在文件,并将光标定位在对应函数的开头。 

自动对齐 

在命令模式下使用“:set ai”命令可以让程序中各行自动对齐。 

显示匹配 

在编程中{}、[]、()常常是成对出现的,而且常常有多层的嵌套,很容易遗漏和失误。所以下面的这个技巧非常有用。在命令模式下使用“:set sm”命令会在用户敲)、]、}时显示出对应匹配的{、[、(来。 

缩写文本 

在编程中常常要输入一些重复且很长的信息,比如较长的名词和公司信息等,这时可以用vi的缩写功能。它可以将一个很长的词用一个很短的缩写来代替。比如一个较长的URL,可以给它一个缩写,在命令模式下使用“:ab myurl http://www.mykms.org/kms/myproject/index.php?id=0023”,然后在插入模式下输入“myurl”后,“myurl”就会自动变成刚才定义的那个长的URL。另外,在插入模式下输入“:una myurl”,则是取消“myurl”这个缩写。 

set选项 

使用“:set”可以设置vi的环境变量。vi的环境变量有很多。使用“:set all”可以显示所有环境变量。使用“:set 变量名及参数”可以设置对应的环境变量。 

下面的命令可显示行号: 

:set number


下面的命令可将文件设为只读: 

:set readonly


下面的命令使vi在“:n”和“:!”命令之前都自动保存文件: 

:set autowrite


下面的命令显示用户处在什么模式下: 

:set showmode


同理,“:set noshowmode”就是关闭此显示。 

vi环境变量还有很多。了解它们,将给用户使用vi带来更多方便。用户可以通过vi的联机帮助查到对应的环境变量的详细作用。 

使用宏 

vi的宏提供了更强大的功能,用户可以根据自己的需要来定制自己的宏,然后通过宏来完成事先定义好的一整套操作。用“map”来定义一个宏,用“unmap”来删除。在熟悉了vi的基本命令后,将这些命令组合起来就能完成复杂的工作。如果再将这些命令的组合定义成宏的话,就可以方便用户经常性地调用了。这是一个非常强大的功能,建议大家多多使用。 

总结 

vi是类Unix操作系统上常用的缺省编辑器。了解了vi,用户就能利用它高效地编辑文件。但是学习vi的过程很长,因为它的功能很多。不过它确实是一个值得花时间来学习的工具。所谓“工欲善其事,必先利其器”,希望大家都能学好vi,善用这一文本编辑的利器。

 

 

Best of VIM Tips (VIM&apos;s best Features) 缩减编辑版

关键字:   vim    

 

:nmap ,s :source $VIM/_vimrc  "执行(载入)vimrc配置
:nmap ,v :e $VIM/_vimrc       "编辑vimrc配置
------------------------------------------------------------------------------ 
#VISUAL MODE Mappings 
:vmap sb "zdi<c-r></c-r>z<esc></esc> : wrap around VISUALLY selected Text 
:vmap st "zdi<!--<C-->z ?><esc></esc>  : wrap <!-- -->around VISUALLY selected Text 
------------------------------------------------------------------------------ 
:ls                             : 列出 buffers 
:cd ..                          : 当前目录到上级目录
------------------------------------------------------------------------------ 
# Great 
guu                             : 将当前行小写
gUU                             : 将当前行大写
gf                              : 当开光标下所以文件名的文件
ga                              : 显示ascii码和十六进制,八进制
------------------------------------------------------------------------------ 
# Markers & moving about 
'.               : 跳到最后修改行
`.               : 跳到最后修改准确位置
<c-o></c-o> :ju(mps) 
:help jump-motions  //跳转帮助,有点意思要看看
------------------------------------------------------------------------------ 
# Abbreviations & maps 
:map   <f7></f7>   :'a,'bw! c:/aaa/x 
:map   <f8></f8>   :r c:/aaa/x 
:map   <f9></f9>   :w<cr></cr>:!c:/php/php.exe %<cr></cr> 
:map   <f11></f11>  :.w! c:/aaa/xr<cr></cr> 
:map   <f12></f12>  :r c:/aaa/xr<cr></cr> 
:ab php           : 列出以php开头的缩写
:map ,            : 列出以,开头的缩写 
------------------------------------------------------------------------------ 
# List your Registers 
:reg             : 显示所有register的内容
"1p....          : 粘贴1号register中的内容
------------------------------------------------------------------------------ 
# Get output from other commands 
:r!ls.exe        : 读取ls.exe命令的输出,并插入到光标位置
!!date           : same thing 
:%!sort -u       : 使用外部命令过滤编辑的内容
------------------------------------------------------------------------------ 
# 记录 (BEST TIP of ALL) 没用过,好像很有用
qq  # record to q 
your commands 

@q to execute 
@@ to Repeat 
------------------------------------------------------------------------------ 
# 用大写字母可以追加到命名register 
# 复制5行,再追加5行
"a5yy 
10j 
"A5yy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值