`
yadsun
  • 浏览: 181368 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Vim实战——匹配自定义的开始标记和结束标记之间的内容

阅读更多

    在xml文件中常有许多自定义的标签,这些标签是成对出现的,如<proterty>和</property>,有的时候我们需要操作某个标签对中的内容而又不要引响标签对之外的其他内容,怎么办呢?

下面是xml文件中的一段内容,假如要查找<data>和</data>中的内容,应该用什么表达式才能满中要求呢?

 

1<cell id="828">

2    <property name="borderRightWidth">1px</property>

3    <property name="borderTopColor">#000000</property>

4    <property name="borderTopStyle">solid</property>

5    <property name="borderTopWidth">1px</property>

6    <data id="865"> <property name="resultSetColumn">M_MATERIAL_ID</property> </data>

7</cell>

8<cell id="829">

9    <property name="borderRightWidth">1px</property>

10    <property name="borderTopColor">#000000</property>

11    <property name="borderTopStyle">solid</property>

12    <property name="borderTopWidth">1px</property>

13    <data id="866">

14        <property name="resultSetColumn">M_NAME</property>

15    </data>

16</cell>

17<cell id="830">

18    <property name="borderRightWidth">1px</property>

19    <property name="borderTopColor">#000000</property>

20    <property name="borderTopStyle">solid</property>

21    <property name="borderTopWidth">1px</property>

22    <data id="867">

23        <property name="resultSetColumn">POL_UOM_ID</property>

24    </data>

25</cell>

26<cell id="831">

27    <property name="borderRightWidth">1px</property>

28    <property name="borderTopColor">#000000</property>

29    <property name="borderTopStyle">solid</property>

30    <property name="borderTopWidth">1px</property>

31    <data id="868">

32        <property name="resultSetColumn">POL_QTY</property>

33    </data>

34</cell>

35<cell id="832">

36    <property name="borderRightWidth">1px</property>

37    <property name="borderTopColor">#000000</property>

38    <property name="borderTopStyle">solid</property>

39    <property name="borderTopWidth">1px</property>

40    <data id="869">

41        <property name="resultSetColumn">POL_UNIT_PRICE</property>

42    </data>

43</cell>

44<cell id="833">

45    <property name="borderRightWidth">1px</property>

46    <property name="borderTopColor">#000000</property>

47    <property name="borderTopStyle">solid</property>

48    <property name="borderTopWidth">1px</property>

49    <data id="870">

50        <property name="resultSetColumn">POL_REF_UNIT_PRICE</property>

51    </data>

52</cell>

53<cell id="834">

54    <property name="borderRightWidth">1px</property>

55    <property name="borderTopColor">#000000</property>

56    <property name="borderTopStyle">solid</property>

57    <property name="borderTopWidth">1px</property>

58    <data id="871">

59        <structure name="dateTimeFormat">

60            <property name="category">Long Date</property>

61            <property name="pattern">Long Date</property>

62        </structure>

63        <property name="resultSetColumn">POL_DATE_END</property>

64    </data>

65</cell>

 

我想过用/<data.*\/data>来查,但是结果如下:

图1

如图所见只查找出了配对的标签在同一行的情况,而下面的<data>和</data>中分了好几行的情况都没有查到。原因是.匹配的是任意字符,但是不包括行尾符即$符,所以当遇到$后匹配就结束了,应该用\_.来代替.,\_.匹配的是包括行尾符在内的任意字符,似乎这样就行了,结果是不是的呢?看一下… …输入/<data\_.*\/data>

图2

事实上这样一来,匹配的是从第一个<data>到最后一个</data>中的所有内容,vim把第一个<data>和最后一个</data>当作一个标签对了。显然不是我所期望的结果,这时就用到一个有用的东西,叫做匹配尽可能少的字符\{-n,m}当然因为是尽可能少的匹配所以永远不会出现超过一次以上的匹配,所以这里的n,m可以省略,甚至两个都不写只写一个\{-}就行了。

那么就试试看吧… …输入/<data\_.\{-}\/data>

图3 

 思考:

        如何只删除查找到的(即黄色高亮部分的内容)内容?试过加/d,但是删除的只是匹配的第一行的内容

 

此问题待日后想出解决办法后补上。

 

~~~~~~~~~~~~~2017.11.15~~~~~~~~~~~~~~

补充:删除黄色高亮部分用替换就可以了,替换成空白,:g :s配合使用,:g/<data\_.\{-}\/data>/s//  



 

      

       水平所限,文中的所写方法并非最简单的,如果您有更好的方法或者有任何问题欢迎留言告知http://yadsun.iteye.com/

  • 大小: 402.5 KB
4
0
分享到:
评论
1 楼 lijunjie 2009-08-12  
挺好的。

相关推荐

    CodeBlocks 的 Vim 插件——cbVide

    CodeBlocks 的 Vim 插件——cbVide,codeblocks 16.01,wxWidgets 2.8.12,tgm-gcc-32 5.1.0

    我的一个vim脚本——增强closetag.vim自动闭合功能

    3. **跳转到匹配的标签**:如果光标位于开始标签上,你可以使用快捷键(如`%`)快速跳转到与之匹配的结束标签。 4. **智能识别嵌套标签**:`closetag.vim`能够理解并处理复杂的嵌套结构,确保正确地关闭所有打开的...

    vim编辑器 配置自定义

    ### Vim编辑器自定义配置详解 在IT领域,尤其是对于程序员和系统管理员而言,Vim编辑器是一款不可或缺的工具。其高效、灵活的特性使其成为众多专业人士的首选文本编辑器。然而,Vim的强大功能也意味着它有较高的...

    vim教程——学习Linux的优质资料

    **vim教程——学习Linux的优质资料** 在深入探讨Linux世界时,掌握Vim编辑器是不可或缺的技能之一。Vim,全称为“Vi IMproved”,是经典的Vi编辑器的增强版,以其高效、灵活和强大的功能深受程序员和系统管理员的...

    VIM中文版-自定义配置

    总之,VIM的自定义配置和snipMate插件的使用极大地提升了开发效率和舒适度。通过调整.vimrc文件,你可以定制出一个符合自己工作习惯的VIM环境,而snipMate则能帮助你快速生成常见的代码结构。学习并熟练掌握这些技巧...

    vim代码自动匹配

    通过以上介绍,我们可以看出,Vim的代码自动匹配功能不仅限于简单的字符补全,还涵盖了路径补全、插件增强、代码理解和自定义快捷键等多个层面,使得程序员在编写代码时能够更加专注和高效。如果你是一名Vim用户,...

    vim配置文件——vim配置教程

    vim配置文件——vim配置教程

    Linux下vim编辑器智能匹配工具

    在Linux操作系统中,vim(Vi Improved)是一款强大的文本编辑器,深受程序员和系统管理员的喜爱。它不仅具有基础的文本编辑功能,还支持大量的插件和自定义配置,使其成为一款高度可扩展的编辑器。本篇文章将深入...

    vimd-design——最新内核_Qz_blankooq_vimd.ahk_

    《vimd设计——基于最新内核的自动化快捷工具》 vimd设计,全称为"Qz_blankooq_vimd.ahk",是一款基于AutoHotkey脚本语言编写的高效键盘快捷工具。这款软件的核心理念在于通过同一热键实现不同功能的智能切换,极大...

    Linux下vim智能匹配

    vim作为一个强大的文本编辑器,拥有丰富的插件和自定义配置,使得它在代码编辑方面具有很高的灵活性和智能化。 在Linux下,vim的智能匹配功能主要由插件实现,如“YCM”(YouCompleteMe)或“Supertab”。这些插件...

    普通人的编辑利器——VIM

    普通人的编辑利器——VIM_(for_windows)

    程序员的编辑器——VIM(zz) - 饮水思源

    - “程序员的编辑器——VIM”可能是对VIM的特定使用场景或者进阶技巧的讲解。 7. **自定义配置**: VIM允许用户在~/.vimrc文件中定制个人的配置,包括快捷键、颜色主题、自动完成等设置。 8. **学习曲线**: ...

    我的Vim,我做主——给初学者准备的礼物

    总的来说,这篇“我的Vim,我做主——给初学者准备的礼物”文章和配套资源旨在为初学者提供一个全面的Vim学习路径,帮助他们快速掌握这款强大的文本编辑器,并将其转化为提高工作效率的得力工具。通过学习和实践,...

    Vim的.vim文件夹和.vimrc配置文件

    Vim是一款强大的文本编辑器,深受程序员和系统管理员的喜爱,其可高度自定义的特性使得用户可以根据个人喜好和工作需求定制自己的编辑环境。在Vim中,`.vim`文件夹和`.vimrc`配置文件是两个至关重要的元素,它们帮助...

    vim环境的配置——模仿sourceInsight功能的Tlist

    这样,按F8会更新当前文件的标签,而按下Leader键(通常是反斜杠 `\`)加`t`会在打开和关闭Tlist之间切换。 为了让Tlist更好地模拟Source Insight,还需要一些额外的配置,例如显示类和成员: ```vim let Tlist_...

    用vim写程式快n倍——Linux

    ### 使用Vim编写程序效率倍增 —— Linux #### 概述 Vim(Vi Improved)作为一款功能强大的文本编辑器,在Linux系统中扮演着极其重要的角色。掌握Vim不仅能够提升开发效率,还能帮助程序员更好地适应Linux环境。...

    学习vi和vim编辑器_第7版_中文+英文_PDF

    《学习vi和Vim编辑器(中文版第7版)》将说明使用这两种程序编辑文档的基础技巧,并讨论高级工具,例如交互式宏与扩展编辑器的脚本——我们的内容编写成容易遵循步骤操作的风格,成就本书的经典地位。读者将学到: ·...

    vim的自定义配置文件

    首先,我们关注的"vim的自定义配置文件"指的是用户根据个人需求和喜好定制的`.vimrc`文件。这个文件位于用户的主目录下,用于存储各种设置、快捷键映射、插件配置等,使得每次启动Vim时都能按照用户的设定运行。...

Global site tag (gtag.js) - Google Analytics