vi 技巧和诀窍~转IBM

复合搜索

     1  #!/bin/ksh
     2  #
     3  echo "Starting"
     4  file=${1}
     5
     6  echo ${file}
     7
     8  if [[ ${file} = 1 ]] ; then
     9          ((file=${file}+1))
    10          echo "Adding one gives "     11                  ${file}
    12  fi
    13  echo "Ending"
    14  exit

  如果希望搜索出现在另一个模式或字符串后面的某个模式或字符串,不管这两个模式或字符串是否在同一行上,那么可以指定由分号 (;) 分隔的两个搜索命令,从而执行复合搜索。例如,要想搜索出现在字符串 {file}+1 后面的字符串 echo,应该使用 /{file}+1/;/echo/。在 清单 6 所示的文件中,这个命令会找到第 10 行的第一个单词。

复合搜索对于寻找代码中出现在另一个命令后面的某个命令尤其有用 — 例如,在设置某个变量之后调用函数的地方。

重放搜索模式

当在文件中搜索要替换的模式时,可以让 vi 把要匹配的任何模式保存在缓冲区中;然后,在执行替换时,可以用缓冲区引用号重放它们。方法是把模式放在 \( 和 \) 之间,这会指示 vi 把模式放在编号的缓冲区(1 到 9)中。在执行替换时,可以用缓冲区引用号 \1 到 \9 引用这些缓冲区。

例如,假设要在 清单 7 所示的文件中搜索以单词 Martin 开头的行并对每个匹配添加前缀 Mr 和后缀 Wicks,那么进入命令模式,输入 vi 命令 :%s/^\(Martin\)/Mr \1 Wicks/g,然后按回车。

清单 7. 重放搜索模式(之前)
Martin is an IT consultant. Martin likes
snowboarding and mountain biking. Martin has
worked on UNIX systems for over 15 years. Martin also
worked for many years before that on mainframes.
Martin lives in London.
~
~
~
~
:%s/^\(Martin\)/Mr \1 Wicks/g

  下面把这个命令分解开解释一下:

  • :%s — 指示 vi 执行替换。
  • / — 模式分隔符。
  • ^\(Martin\) — 寻找以字符串 Martin 开头的行并把这个字符串保存在缓冲区 1 中。
  • / — 模式分隔符。
  • Mr \1 Wicks — 把找到的字符串替换为字符串 Mr,加上缓冲区 1 中的内容,再加上字符串 Wicks
  • / — 模式分隔符。
  • g — 全局修改(即修改所有匹配的地方)。

在搜索和替换字符串中都可以使用缓冲区引用。

修改的结果见 清单 8

清单 8. 重放搜索模式(之后)
Mr Martin Wicks is an IT consultant. Martin likes
snowboarding and mountain biking. Martin has
worked on UNIX systems for over 15 years. Martin also
worked for many years before that on mainframes.
Mr Martin Wicks lives in London.
~
~
~
~
:%s/^\(Martin\)/Mr \1 Wicks/g

  

筛选

您可能知道,在 vi 中按 Escape,输入 :!command(其中的 command 是要执行的 UNIX 命令),然后按回车,就可以在 shell 中执行命令。例如,:!pwd 显示编辑会话当前的工作目录。

但是,还可以把文件的一部分作为标准输入发送给 UNIX 命令,并用产生的输出替换编辑缓冲区中的相同部分。例如,如果希望在 vi 会话内对 清单 9 所示的整个文件进行排序,可以按 Escape,输入 :1,$!sort 并按回车,这让 vi 把从第一行到文件末尾($)的所有内容传递给 sort命令,用输出替换指定的部分。

清单 9. 在 vi 会话内执行文件排序(排序之前)
5
4
3
2
7
6
5
4
8
9
6
3
1
3
4
~
~
:1,$!sort

  

清单 10 显示 sort 操作的结果。

清单 10. 在 vi 会话内执行文件排序(排序之后)
1
2
3
3
3
4
4
4
5
5
6
6
7
8
9
~
~
:1,$!sort

另外,还可以在 shell 命令前面加上从当前游标位置开始希望操作的行数。方法是按 Escape,然后输入指定行数的数字,然后输入两个惊叹号(!!),最后输入 UNIX 命令。

例如,把游标放在 清单 9 中第 4 行的开头,按 Escape,然后输入:

4!!awk ‘{print "New text",$0}‘

再按回车,就会在第 4 到第 7 行(含)上加上前缀文本 New text,见 清单 11

清单 11. 在多个代码行前面加上新文本
5
4
3
New text 2
New text 7
New text 6
New text 5
4
8
9
6
3
1
3
4
~
~
!awk ‘{print "New text",$0}‘

可以使用管道分隔符(|)把 UNIX 命令连接在一起,从而在 vi 会话中执行复杂强大的筛选。例如,假设要把当前 vi 会话的编辑缓冲区中的文件内容替换为每行的第一个空格分隔的字段,按升序排序并转换为大写,那么在按 Escape 之后输入:

:1,$!awk ‘{print $1}‘ | sort | tr [:lower:] [:upper:]

保存部分内容

可以保存当前编辑的文件的部分内容,方法是按 Escape,然后输入 :start,endfile,其中的 start 是当前文件中要保存的第一行,end 是要保存的最后一行,w 表示希望写到另一个文件中(或者覆盖现有的文件),file 是指定的部分要保存到的文件。对于最后一行,可以使用 $ 表示文件的末尾。可以在 w 后面使用两个大于号(>>)表示希望把内容附加到文件中而不是覆盖文件。清单 12 中的示例把第 6 到第 9 行(含)附加到文件 /tmp/newfile 中。

清单 12. 把文件的部分内容保存到另一个文件中(附加而不是覆盖)
     1  #
     2  # Internet host table
     3  #
     4  ::1     localhost
     5  127.0.0.1       localhost       loghost
     6  192.168.0.6     centos5
     7  192.168.0.10    appserv
     8  192.168.0.11    webserv
     9  192.168.0.12    test
    10  192.168.0.5     solaris10       # Added by DHCP
~
~
~
:6,9w >> /tmp/newfile
时间: 2024-10-10 02:45:08

vi 技巧和诀窍~转IBM的相关文章

25条提高iOS App性能的技巧和诀窍

 这篇文章来自iOS Tutorial Team 成员 Marcelo Fabri, 他是 Movile 的一个iOS开发者. Check out his personal website or follow him on Twitter.原文地址      当我们开发iOS应用时,好的性能对我们的App来说是很重要的.你的用户也希望如此,但是如果你的app表现的反应迟钝或者很慢也会伤害到你的审核. 然而,由于IOS设备的限制有时很难工作得很正确.我们开发时有很多需要我们记住这些容易忘记的决定对

vi技巧

vi技巧 a. 进入输入模式 新增 (append) a :从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动. A:从光标所在列最後面的地方开始新增资料. 插入 (insert) i:从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动. I :从光标所在列的第一个非空白字元前面开始插入资料. 开始 (open) o :在光标所在列下新增一列并进入输入模式. O: 在光标所在列上方新增一列并进入输入模式. b. 退出vi 在指令模式下键入:q,:q!,:wq或:x(注意:

12个不可不知的Sublime Text应用技巧和诀窍

本文为您提供Sublime Text编辑器的12个技巧和诀窍,深入挖掘这个看似简洁的代码编辑器,背后所隐藏的实现各种高级功能的无限可能. 1) 选择 以下是一些Sublime Text选择文本的快捷键: Command + D 选中一个单词 Command + L 选中一行 Command + A 全选 Ctrl + Command + M` 选中括号内所有内容 (编写CSS或JS时非常实用) Sublime Text还支持一次选中多行的操作:Furthermore, Sublime Text

Sublime Text编辑器的12个技巧和诀窍

本文为您提供Sublime Text编辑器的12个技巧和诀窍,深入挖掘这个看似简洁的代码编辑器,背后所隐藏的实现各种高级功能的无限可能. 1) 选择 以下是一些Sublime Text选择文本的快捷键: Command + D 选中一个单词 Command + L 选中一行 Command + A 全选Ctrl + Command + M` 选中括号内所有内容 (编写CSS或JS时非常实用) Sublime Text还支持一次选中多行的操作:Furthermore, Sublime Text b

vi 技巧

a. 进入输入模式     新增 (append)     a :从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动.     A:从光标所在列最後面的地方开始新增资料. 插入 (insert)     i:从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动.     I :从光标所在列的第一个非空白字元前面开始插入资料. 开始 (open)     o :在光标所在列下新增一列并进入输入模式.     O: 在光标所在列上方新增一列并进入输入模式. b. 退出vi 在指

[转]25条提高iOS App性能的技巧和诀窍

以下这些技巧分为三个不同那个的级别---基础,中级,高级. 基础 这些技巧你要总是想着实现在你开发的App中. 1. 用ARC去管理内存(Use ARC to Manage Memory) 2.适当的地方使用reuseIdentifier(Use a reuseIdentifier Where Appropriate) 3.尽可能设置视图为不透明(Set View as Opaque When Possible) 4.避免臃肿的XIBs文件(Avoid Fat XiBs) 5.不要阻塞主进程(D

1元云购技巧、诀窍、秘诀,中奖率极高,云购中奖提高90%左右

1. 您可能经常看到,有些小号没头像,没昵称,经验10(消费1元获得10经验),花了1元中iphone5s,单反,ipad等等等. 这时候估计您就会咬牙切齿了,为什么别人花了30元就中,同个宝贝我花了100,200,甚至上千都中不上,这里面当然有学问拉. 曾经我的大号花了1500元,小的买过几块,大的买过500,结果什么都没. 后来一次偶然的机会,我打电话给客服,骗他们说我的账号出现了问题(私信发不了),结果云购客服很快加了我好友,并私信我了-. 我这么做当然是有目的的,就是想通过官方账号的链接

Sublime Text 3 应用技巧和诀窍

1.选择 以下是一些Sublime Text选择文本的快捷键: Command + D 选中一个单词 Command + L 选中一行 Command + A 全选Ctrl + Command + M` 选中括号内所有内容 (编写CSS或JS时非常实用) Sublime Text还支持一次选中多行的操作:Furthermore, Sublime Text brings lets us select multiple lines at once, which can significantly b

快速提高 Vi/Vim 使用效率的原则与途径

Vi/Vim 是所有 Unix/Linux 操作系统默认配备的编辑器.因其强大的功能和高效的操作,Vi/Vim 也成为众多 Unix/Linux 用户.管理员必须掌握并熟练使用的编辑工具之一.尤其是在没有图形界面的情况下,更是离不开 Vi/Vim.Vi/Vim 命令非常多.用法极为灵活,掌握起来有一定的难度.本文作者将结合自己的使用经验,分七个方面着重介绍哪些原则.途径或命令能快速提高 Vi/Vim 文件编辑效率,从而达到事半功倍的效果. 引言 Vi 最初是由 Bill Joy 在 1976 年