Vim實戰指南(五):文本替換

原文地址:Vim實戰指南(五):文本替換正則表達式

Introduction

在編輯代碼時,有時候你但願對變量或者函數重命名。vi提供了強大的替換功能,比其餘普通編輯器的ctrl+r更好用。編輯器

替換

vi的替換基於ex命令函數

:s/old/new/g:將當前行全部的old替換成new,s是substitute,g是global
:1,10s/old/new/g:將第1到第10行全部的old替換成new
:%s/old/new/g:將當前文件全部行的old替換成new,%是第一行的意思
:%s/old/new/gc:同上,可是替換前須要確認,c是confirm
:g/pattern/s/old/new/g:將符合pattern的行內的全部old替換成new,第一個g是指匹配pattern的全部行,第二個g是指行內全部的匹配old的字符串code

正則表達式

下面列出正則表達式中使用的metacharacters:ci

.:匹配除了換行符以外的任何符號(包含空格),如a.a匹配aaa和aba
:重複前面(零次或屢次)匹配符,如a匹配a和aa
^:當出如今表達式前面時,表示頭部匹配,如^.匹配行首第一個字符
$:當出如今表達式尾部時,表示尾部匹配,如.$匹配行尾第一個字符
\:轉移符,如*表示匹配*,而不是重複前面的匹配符
[]:匹配中括號中任何一個匹配符,如[ab]表示匹配a或者b
\\(\\):將括號中的模式保存
\\<\\>:匹配以\\<符號後開始和\\>符號前結束的單詞字符串

正則表達式能夠結合上面的pattern使用,這裏再也不贅述。get

技巧

在程序編寫中,你以爲pan有歧義,你但願把全部的pan替換成panic:it

:%s/pan/panic/g

稍後你發現,全部的panic被替換成了panicic,這不是咱們想要的。你注意到pan後面都有一個符號,所以你使用:io

:%s/pan[ ,.:;]/panic[ ,.:;]/g

接着你發現,這種匹配仍然有漏網之魚,如pan=1,仍然須要匹配=號。
事實上你打不用如此麻煩,只需下面簡單的替換便可:變量

:%s/\<pan\>/panic/g

Summary

本文列出了經常使用的文本編輯中全局替換的方法。因爲正則表達式歷來都不是一個簡單的話題,本文只是簡單的介紹瞭如何在替換中使用正則表達式,事實上vi支持全部的正則表達式功能,能夠完成任何你能想到的替換!

相關文章
相關標籤/搜索