Vim用特定条件替换图案

时间:2017-09-03 21:11:42

标签: regex vim

我需要在Vim中将;\s*\<do\>替换为\rdo。但是,如果在其前面有一个Fortran注释符号;\s*\<do\>,即在搜索模式!中,我还需要确保!.*;\s*\<do\>不会被替换。例如,未注释行中的; do

j=2; do i=1, 10

应替换为

j=2
do i=1,10

但不应替换以下注释部分中的; do

 k=3 ! j=2; do i=1, 10 

我怎样才能在vim中这样做?我尝试了\(!.*\)\@!;\s*\<do\>但它不起作用。

2 个答案:

答案 0 :(得分:3)

我根据你的例子编辑了这个答案:

尝试使用:g!/<pattern1>/s/<pattern2>/<replacement>/g

:g!/!.*/s/\v;\s*do/\rdo/g

仅在不包含pattern2的行上用replacement替换pattern1

原始答案:

以下模式应该按照您的要求执行:/[^*]\{0,1\}\zs;\\s\*\\<do\\>。 你可以用它来替换你想要的任何东西,例如%s/<pattern>/\rdo/g

答案 1 :(得分:0)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/add_song_layout"
    tools:context="com.example.android.playmymusicapp3.AddSongActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </ScrollView>

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <com.github.clans.fab.FloatingActionButton
        android:id="@+id/floatingButton"
        android:src="@mipmap/plus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:onClick ="onClick"
        android:layout_marginBottom="16dp"
        android:layout_marginRight="16dp"
        app:backgroundTint="@color/colorPrimary">

    </com.github.clans.fab.FloatingActionButton>

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="82dp"
        android:text="Add songs to your event..."
        android:textSize="20sp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginTop="37dp"
        android:layout_below="@+id/textView3"
        android:layout_alignParentStart="true">

        <EditText
            android:id="@+id/editText8"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:ems="10"
            android:hint="Artist"
            android:inputType="textPersonName" />

        <EditText
            android:id="@+id/editText7"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:ems="10"
            android:hint="Title"
            android:inputType="textPersonName" />
    </LinearLayout>

</RelativeLayout>