发信人: thinelephant (光吃不长), 信区: VIM
标  题: VIM 测试题(给用 VIM 做数据处理的初学者)
发信站: 水木社区 (Thu Oct 27 20:21:50 2005), 站内

以前写的,主要是针对数据处理的,虽然写得不好,不过也发到版上留个备份啦。:-)

VIM 测试题(给用 VIM 做数据处理的初学者)

请回答以下操作所需的步骤或命令:

01. (4) 光标移到最后一行
02. (4) 设置跳格(Tab)宽度为 4
03. (4) 忽略大小写查找字符串 elephant(本题不得使用 GUI)
04. (4) 将所有 elephant 替换为 pig(本题不得使用 GUI)
05. (4) 打开 VIM 关于正则表达式的帮助文档
06. (4) 在阅读 VIM 帮助时遇到链接如何跳转?如何返回?

07. (6) 比较编辑两个内容相近的文件
08. (6) 借助外部命令 sort 将文件的行按字母顺序进行排序
09. (6) 将每一行的第一个字符与第二个字符交换
10. (6) 将当前目录中所有文件的文件名插入到当前文本中

假设文件 data.txt 内容如下:

ACDSee             000001   499.95  ACD Systems, Ltd.
Internet Explorer  000004  1999.50  Microsoft Corp.
Vi IMproved        000015     0.00  Bram Moolenaar
FlashFXP           000204   199.00  CEDsoft

请回答以下操作所需的正则表达式(可查阅帮助,反复尝试):

11. (4) 匹配每行的软件名字段
12. (4) 匹配每行的编号字段
13. (4) 匹配每行的价格字段
14. (4) 匹配每行的开发者字段

请回答以下操作所需的步骤或命令:

15. (6) 交换每行的编号和价格字段
16. (8) 借助外部命令 sort 将文件的行按软件价格进行排序
17. (8) 将连续两个或以上的空格替换为一个跳格字符
18. (6) 删除每行的开发者字段

送分题,写得越多越好:

19. (8) 请写出任何难以用 notepad 完成的并且你会的 VIM 功能。

============================================================================

参考答案

01. G
    在 Normal 模式下按 G 快速跳到最后一行,按 gg 跳到第一行,当然,也可以按
    Ctrl-Home 和 Ctrl-End。
02. :set tabstop=4
    将 Tab 设成大一点的宽度,比如 16,查看数据文件的时候比较有用,对齐清晰。
03. 方法一,先设置忽略大小写,然后查找
    :set ignorecase
    /elephant
    :set noignorecase
    方法二,在前面加入 \c 表示忽略大小写
    /\celephant
04. :%s/elephant/pig/g
    g 表示如果一行有多个 elephant 将全部替换,没有 g 表示只替换每行第一个。
    另外还有 i 标志,有 i 表示忽略大小写。i g 这两个标志非常基础!
05. :help pattern
    用 :help xxx 看一个东西帮助,提示:在 :help 后面可以尝试按 tab 补全,
    比如输入 :help search 然后按 tab(一次或多次),你就可以看到
    search-pattern 正是你想要看的。
06. Ctrl-] Ctrl-T
    帮助里面用两个 | 括起来高亮的,比如 |pattern| 都是可以跳转的链接,按
    Ctrl-](按住 Ctrl 按右中括号)跳进去,再按 Ctrl-T 跳回来。

07. 在命令行下 vim -d file1.txt file2.txt 可以用比较模式查看编辑两个文件,
    或者如果在 Windows 下面,可以先选中两个文件,然后鼠标右点菜单,选
    “Diff with Vim”。一般在比较某个文件的两个版本(即是一个是以前的,
    一个是修改后的)时很有用。
08. :%!sort
    表示将整个文件的行用外部命令 sort 过滤一遍,不过要当心 Windows 的 sort
    命令在某些条件下会产生错误的排序结果。
09. 方法一,用正则表达式匹配替换每行的前两个字符
    :%s/^\(.\)\(.\)/\2\1/
    方法二,用块选择
    Normal 模式下,先把光标移到第一行第一个字符上,按 Ctrl-V 进入块选择模式,
    移动光标到最后一行第一个字符上,这时选中的是每一行的第一列字符,按 d
    删除,然后移动光标到第一行第二个字符,按 P(注意是大写)粘贴,刚才删除的
    第一列就被粘到第二列上了。
10. :split .
    打开当前目录(. 表示当前目录,当然也可以是比如 C:\ ),然后就可以将目录
    中的文件名复制粘贴过来了。

请把 :help pattern 那一页帮助内容仔仔细细阅读 99 遍!:-)

11. 软件名字段的特征是:位于行首;由若干个单词组成,单词之间用一个空格分开。
    ^\S\+\( \S\+\)*
12. 编号字段的特征是:恰好六个数字。
    \<\d\{6}\>
13. 价格字段的特征是:若干个数字,一个点,若干个数字。
    \d\+\.\d\+
14. 开发者字段的特征跟软件名字段的特征类似,但是位于行末。
    \S\+\( \S\+\)*$

15. 同 09 题方法二,用块选择。
16. 用块选择将价格字段换到前面,然后用 :%!sort 排序,然后换回来。
17. :%s/  \+/\t/g (注意这里是两个空格)或者
    :%s/ \{2,}/\t/g
18. 用块选择,按 D(大写)删除。块选择后按 d 跟 D 的区别是:d 删除选中的块,
    D 删除选中的块以及后面一直到行末的内容。

19. 略。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.