簡體   English   中英

vim宏,直到匹配模式

[英]vim macro until pattern is matched

我有一系列狀態,沒有人需要經常修改,因此我想刪除空白。

我嘗試了以下擊鍵,因為數組和結尾行之間的逗號之間有一些空格字符:

q a /, ENTER FORWARD v /\\n ENTER d

不幸的是,任何格式化此格式的人都忽略了將任何空格放在'Montana'之后,因此當我運行宏51@a ,它在27次迭代后就中斷了。

我如何才能讓宏僅在\\s匹配的情況下運行模式,或者更好的是,如何運行宏直到它識別出); (數組末尾)。

編輯:這是一個例子。 請注意除MTNENVNH鍵之外的所有條目之后的兩個空格字符。

$state_list = array('AL'=>"Alabama",  
        'AK'=>"Alaska",  
        'AZ'=>"Arizona",  
        'AR'=>"Arkansas",  
        'CA'=>"California",  
        'CO'=>"Colorado",  
        'CT'=>"Connecticut",  
        'DE'=>"Delaware",  
        'DC'=>"District Of Columbia",  
        'FL'=>"Florida",  
        'GA'=>"Georgia",  
        'HI'=>"Hawaii",  
        'ID'=>"Idaho",  
        'IL'=>"Illinois",  
        'IN'=>"Indiana",  
        'IA'=>"Iowa",  
        'KS'=>"Kansas",  
        'KY'=>"Kentucky",  
        'LA'=>"Louisiana",  
        'ME'=>"Maine",  
        'MD'=>"Maryland",  
        'MA'=>"Massachusetts",  
        'MI'=>"Michigan",  
        'MN'=>"Minnesota",  
        'MS'=>"Mississippi",  
        'MO'=>"Missouri",  
        'MT'=>"Montana",
        'NE'=>"Nebraska",
        'NV'=>"Nevada",
        'NH'=>"New Hampshire",
        'NJ'=>"New Jersey",
        'NM'=>"New Mexico",
        'NY'=>"New York",
        'NC'=>"North Carolina",
        'ND'=>"North Dakota",
        'OH'=>"Ohio",  
        'OK'=>"Oklahoma",  
        'OR'=>"Oregon",  
        'PA'=>"Pennsylvania",  
        'RI'=>"Rhode Island",  
        'SC'=>"South Carolina",  
        'SD'=>"South Dakota",
        'TN'=>"Tennessee",  
        'TX'=>"Texas",  
        'UT'=>"Utah",  
        'VT'=>"Vermont",  
        'VA'=>"Virginia",  
        'WA'=>"Washington",  
        'WV'=>"West Virginia",  
        'WI'=>"Wisconsin",  
        'WY'=>"Wyoming"
);

至:

$state_list=array('AL'=>"Alabama",'AK'=>"Alaska",'AZ'=>"Arizona",'AR'=>"Arkansas",'CA'=>"California",'CO'=>"Colorado",'CT'=>"Connecticut",'DE'=>"Delaware",'DC'=>"District Of Columbia",'FL'=>"Florida",'GA'=>"Georgia",'HI'=>"Hawaii",'ID'=>"Idaho",'IL'=>"Illinois",'IN'=>"Indiana",'IA'=>"Iowa",'KS'=>"Kansas",'KY'=>"Kentucky",'LA'=>"Louisiana",'ME'=>"Maine",'MD'=>"Maryland",'MA'=>"Massachusetts",'MI'=>"Michigan",'MN'=>"Minnesota",'MS'=>"Mississippi",'MO'=>"Missouri",'MT'=>"Montana",'NE'=>"Nebraska",'NV'=>"Nevada",'NH'=>"New Hampshire",'NJ'=>"New Jersey",'NM'=>"New Mexico",'NY'=>"New York",'NC'=>"North Carolina",'ND'=>"North Dakota",'OH'=>"Ohio",'OK'=>"Oklahoma",'OR'=>"Oregon",'PA'=>"Pennsylvania",'RI'=>"Rhode Island",'SC'=>"South Carolina",'SD'=>"South Dakota",'TN'=>"Tennessee",'TX'=>"Texas",'UT'=>"Utah",'VT'=>"Vermont",'VA'=>"Virginia",'WA'=>"Washington",'WV'=>"West Virginia",'WI'=>"Wisconsin",'WY'=>"Wyoming");

編輯:

只是谷歌vim宏,直到模式匹配,並遇到了我自己的問題。 我現在有一個更好的例子:

    namespace A{
            class a{}
            class a{}
    }
    namespace B{
            class b{}
            class b{}
            class b{}
    }

需要成為:

    namespace A{
            class Aa{}
            class Aa{}
    }
    namespace B{
            class Bb{}
            class Bb{}
            class Bb{}
    }

這不能用先前接受的答案解決。

坦率地說,最簡單的答案就是加入隊伍。

如果視覺上選擇整個區域,然后按J (或將范圍輸入到:join ),則所有行將以一行結尾。 (元素之間可能會有多余的空格,但這更容易解決,然后嘗試編寫宏)。

如果您想刪除多余的空格,可以運行

:s/,\s\+/,/g

在連接線上。

看看:h J:h :join

首先,您可以使用一個命令輕松刪除所有結尾的空格:

:%s/\s\+$//e

這將適用於文件的每一行。 如果只想在這段代碼上執行此操作,則可以指定不同的范圍(而不是%,它是整個文件)。 例如,您可以傳遞行號(1到51):

:1,51s/\s\+$//e

或首先在視覺上進行選擇,然后運行命令刪除空格(您必須在開始此序列的第一行中):

V/)<CR>:s/\s\+$//e

如果您確實想使用宏,則可以稍微調整(並簡化)宏:

qa0f,lDq

然后首先在視覺上選擇所有它們,然后一次在每一行上運行它(再次,從所需的行開始,我不會在這里放gg ,因為它可能只是文件的一部分):

V/)<CR>:normal @q

這將播放宏在每個選定的線,最多與線)

希望對您有所幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM