2017-05-27 86 views
0

的Windows 10(64位),Emacs的25.1Emacs。如何從其他文本中刪除所有文本中的「some_text/XXX」?

假設我有文本:

aa11aaa aaaaa "api/method1" bbbbbbb 
dddeeee ee "api/method2" ddddddd 
ee2222ezzzzzzzzzzzzzzzzzz "api/method1" eeeeeee 
aaaaaaa222222222222"api/method3" fffffff 
xwwwwxx "api/method4" bbbbbbb 

我希望削減包含「API/XXX」

,其中XXX所有文字是方法名稱(例如,方法4

。因此,其結果必然是:

aa11aaa aaaaa bbbbbbb dddeeee ee ddddddd ee2222ezzzzzzzzzzzzzzzzzz eeeeeee aaaaaaa222222222222 fffffff xwwwwxx bbbbbbb

我想使用Emacs的內置功能(無需編寫自定義的elisp腳本或Emacs宏)。

回答

0

你要做的就是搜索該字符串和用一個空字符串替換(沒有字符):

隨着光標要開始搜索和替換,這樣做:

M-x replace-string RET api/XXX RET RET 

或者如果您需要匹配正則表達式,請改用命令replace-regexp

或者,如果你想逐個檢查每個命中搜索,並告訴Emacs中是否更換它,使用query-replaceM-%)或query-replace-regexpC-M-%)。查詢時可以點擊!從當前位置向前進行替換。

使用C-h f並輸入命令名以獲取有關該命令的更多信息。例如,C-h f replace-string告訴你:

replace-stringreplace.el互動編譯Lisp函數。

(replace-string FROM-STRING TO-STRING &optional DELIMITED START END BACKWARD) 

此功能僅用於交互式使用;在Lisp代碼中使用 代替使用search-forwardreplace-match

TO-STRING替換出現的。

保留的情況下每場比賽,如果case-replacecase-fold-search 是非nil和沒有大寫字母。 (保留情況下意味着,如果匹配的字符串是全部大寫,或大寫, 則其更換upcased或大寫)。

忽略只讀匹配如果query-replace-skip-read-only是非nil, 忽略隱藏比賽如果search-invisiblenil,並忽略更多 匹配使用isearch-filter-predicate

replace-lax-whitespace如果是非nil,字符串 在空間或空間被替換將匹配由正則表達式 在search-whitespace-regexp定義的空白字符的序列。

如果replace-char-fold非零,則匹配使用字符摺疊,即 即它忽略變音符號和其他 字符串之間的差異。

第三參數DELIMITED(前綴arg if interactive),如果不是nil,表示替換 只有字邊界包圍的匹配。負前綴arg意味着 將被替換爲後向。

操作上STARTEND之間的區域(如果兩者都nil,從點 到緩衝區的末尾)。以交互方式,如果瞬態標記模式爲 啓用並且標記處於活動狀態,則對區域內容進行操作;否則從點到緩衝區的可訪問部分結束。

使用M-n將最後一個增量搜索字符串拉到小寫緩衝器 ,讀取。

這個函數通常是在Lisp程序中使用的錯誤的東西。

你可能想要的是這樣一個循環:

(while (search-forward FROM-STRING nil t) 
    (replace-match TO-STRING nil t)) 

其運行速度更快,也不會設置標記或打印任何東西。 (您可能需要更復雜的循環,如果可以匹配空字符串 和TO-STRING也爲空)。

相關問題