2009-12-02 96 views
4

在vim中有沒有辦法給出編輯器命令列表?我想執行一系列'全局'命令,並且命令有一些模式。所以我理想地想要生成命令列表(使用正則表達式搜索&替代),然後運行它們,而不必輸入每個命令。vim:執行編輯器命令列表

謝謝! 拉夫

+0

您是否試圖在函數或腳本內部生成列表,或者文本文件是否足夠? – jheddings 2009-12-02 06:00:51

回答

8

(更新:S /緩衝器/寄存器/ G)

如果你可以抽出所有你要運行到寄存器的命令,然後執行寄存器?

http://www.bo.infn.it/alice/alice-doc/mll-doc/linux/vi-ex/node24.html

舉例來說,如果你有這樣一個文件:

abc 
def 
ghi 
dd 
dd 

然後做

:g/dd/y A 

這洋基與日所有線路,並追加到寄存器

然後,如果您位於文件的第一行,並鍵入:

@a 

然後2號線現在被刪除,文件應該是這樣的:

ghi 
dd 
dd 
+0

+1:很好!非常非常很好! – DrAl 2009-12-02 08:22:35

+0

很好的答案。這正是我在找的。謝謝!-Gaurav – user10 2009-12-02 16:56:20

+0

好帖子。我不想看起來很關鍵,但我很好奇你爲什麼做了一些事情。更容易記錄一個宏?而對於登錄註冊會不會更容易使用視覺模式,然後抽出而不是搜索你想要抽取的命令?爲什麼你要註冊A而不是(它們結束如果你有一個原因,最好是好奇)最後,當你將文本拷貝到一個寄存器中,而不是一個緩衝區,寄存器就像剪貼板,緩衝區就是你正在編輯的文本 – mmrobins 2009-12-02 21:29:47

1

聽起來像是宏給我。谷歌vim宏獲取大量有用的信息。基本上

  1. 在命令模式下鍵入q後面跟着一些其他字母,這將是我們存儲宏的寄存器。例如'qw'。
  2. 運行您想要存儲以供將來使用的命令。這可以是任何東西,包括正則表達式替換,移動,插入,刪除等。
  3. 當你完成了再次打q。您現在已經存儲了您的操作以供將來使用。重新運行你剛剛輸入的@w(或者你用來保存宏的寄存器的任何字母)。

宏中有很多功能。有時候你想在會話之間保存宏。當我想這樣做時,可以通過粘貼剛剛保存的寄存器將宏粘貼到緩衝區中。例如,如果你保存你的宏來註冊w,那麼輸入「wp來粘貼註冊表w」(注意這是雙引號,而不是兩個單引號),當你按下escape或enter鍵時,你會看到一些有趣的字符。可讀的方式寫這些喜歡和,但^ [和^ M也將工作

你現在可以將這些行寫入一個註冊表(我看到有人剛剛發佈了一個答案,但有點不同,我會做)在視覺模式下選擇文本,然後輸入「wy。這將選定的文本放入註冊表w中。現在將該寄存器作爲宏運行,像以前一樣鍵入@w。

如果是經常使用的東西,可能值得將宏映射到.vimrc中的快捷命令。例如,我的vimrc中有幾張地圖可以幫助我輕鬆打開並保存我的文件。的vimrc

" For modifying the .vimrc 
nmap ,e :e $HOME/.vimrc<cr> 
nmap ,s :write!<cr>:source $HOME/.vimrc<cr> 

現在,當我編輯的任何文件,並發現了一個新的宏,我想救我型,E打開我的.vimrc。我粘貼宏,預置一個map語句(根據你所在的模式不同,有不同的地圖,如果你感興趣的話可以有大量的文檔來解釋這個),並且用.vimrc保存.s也可以獲得.vimrc以便我的新映射命令在其他文件中可用,而無需重新啓動vim。

+0

正如你所預料的那樣,我現在有一個宏,我想跨文件使用,因此想將它保存在我的.vimrc中。所以我打開了我的.vimrc文件,並粘貼了我的宏(「ay)」,然後我創建瞭如下所示的相應條目: 'nmap,a:%s/0 \ ./ || 0./^Mgg :%s/\(Topic [0-9] * \):/ {| border =「1」style =「float:left;」\ r!colspan =「2」align =「center」|''' 1'''b/^ Mgg:%s/^ \([az] \)/ | - \ r | \ 1/^ Mgg:g/^ $/d^MGo |}^[:g/^ {|/S/^ {|/|} \ r {|/^ Mggdd' 但現在打開任何文件,我得到:檢測 出錯處理的〜/ .vimrc: 線17: E749:空緩衝區 任何想法?Thx很多! – user10 2010-01-04 08:11:45

+1

我想出了我的地圖表達式的問題。我使用的是管道字符而沒有用反斜槓轉義它。當我手動鍵入命令時,我不需要轉義它,但是當我設置一個宏,顯然我需要逃避它(因爲否則我第四墨水編輯器將其解釋爲一個命令的結束和另一個命令的開始 - 對管道操作員的shell的常見解釋)。 – user10 2010-01-05 04:53:33

+0

很高興你知道逃脫角色。有時候會發生這種情況,並且可能會很痛苦。我還沒有弄清楚的一件事情是如何在多行中輸入這樣一個宏,以便可以很好地格式化,甚至可以用註釋來解釋正在做什麼。 – mmrobins 2010-01-06 21:20:58

0

這裏是映射到交互方式運行VIM命令:

" run selected vimscript 
vmap <Leader>r "vy:@v<CR> 
" run vimscript line 
nmap <Leader>r "vyy:@v<CR> 

檢查VIM幫助:在你的情況

:h :@ 

所以(愚蠢的例子):

:g/line/ 
:g/for/ 
:g/endfor/ 

for line in getline(1, 3) 
    let @a = line 
    @a 
endfor 

將它保存as .vim和:so%

0

「命令」一詞在這裏有點含糊不清。你也可以使用 執行Ex命令,這些命令使用 :@「 」,例如用於默認寄存器。當你編寫vimscript代碼時,例如在你的.vimrc文件中,這個特別有用,並且你想測試函數或映射,以確保他們的工作好。

所以,如果你有一個包含

tabedit http://stackoverflow.com/questions/1830886/vim-executing-a-list-of-editor-commands 
%s/intuited/The King Of Everything/g 
w /tmp/superduperawesome.html 
!/usr/bin/sensible-browser /tmp/superduperawesome.html 

一個緩衝區,你可以使用正常的模式操作

ggyVG:@" 

帶來了一個稍微不同的VERSI在此頁面上。

它也可以執行一個儲存在寄存器中,或在一個變量的代碼,使用

:execute @" 

但似乎與此有些怪異的問題:它會停止當它擊中評論執行或塊的結尾。我沒有使用這些問題:@「。