Vim實戰指南(四):ex命令

原文地址:Vim實戰指南(四):ex命令緩存

Introduction

ex是Unix下的一個文本編輯器。至於爲何忽然講到這個,那是由於vi就是ex的"visual mode"。
你已經見過vi中的":w", ":q!",沒錯,這些就是來自於ex命令。
ex命令遠不止這些,實際上全部":"開頭的命令,也就是你在vi最下面看到的命令行,都屬於ex命令。
接下來我要詳細的介紹一下,ex命令的用法。編輯器

ex簡介

首先咱們打開ex:工具

$ ex file
"file" 3L, 16C
Entering Ex mode.  Type "visual" to go to Normal mode.

輸入1,3,屏幕上將顯示1-3行的內容。
試着輸入"visual"或者"vi",是否是回到了熟悉的vi界面?
想要使用ex,輸入":",是否是在最下面看到了ex命令行?
ex到底是什麼東西?事實上這和歷史有關,在早期,顯示器並不像如今這麼好用,那會的「顯示器」只有按行顯示的功能。當你但願顯示某行,輸入命令,「顯示器」上纔會顯示那行。試着想一想一個不支持上下左右滾動的界面。
而控制這個「顯示器」顯示文本的命令行工具,就是ex。命令行

ex vs vi

爲何咱們有了vi還要使用ex?由於對於大段文本的操做,ex命令比vi命令行模式(command mode)更方便。
ex的命令都是基於行的(早期的「顯示器」,或者你的小型計算器,除了行列什麼都沒有了),如:3d

:3:顯示第三行
:3,5:顯示第3到5行
:3s/hello/hi:將第三行的hello替換成hi,這裏s是substitute的縮寫code

而在vi命令行模式下,你只須要簡單的:orm

3Gip

可是對於刪除3-6行,ex命令只須要:get

:3,6d:這裏d是delete的縮寫it

而在vi命令行模式下,你須要:

3G
3dd:這裏你還須要計算6-3=3

另一個例子,將3-6行放到14行的後面,ex命令只須要:

:3,6m14

而在vi命令行模式下,你須要:

3G
3dd
14G
pp

ex的優點就體如今這裏。

ex行

上面咱們見過,ex命令都是基於行的,而得到行號有下面幾種方法:

3:直接輸入行號
3-6:行範圍
.:當前行
/pattern/:知足pattern的第一行
$:最後一行
%:每一行

你能夠組合這些,如:

:3,$d:刪除3行到最後一行
:%d:刪掉每一行

你也能夠:

:.,.+3d:刪除當前行及後面3行
:/pattern/d:刪除包含pattern的第一行
:/pattern1/,/pattern2/d:刪除從pattern1到pattern2的行

搜索

在vi中,使用/進行搜索,是否是以爲每次使用n/N來查找下一個太慢了?試試ex吧:

:g/pattern/nu

是否是全部包含pattern的行以及行號都打印出來了?這裏g的意思是global,全文的意思,nu是number,行號的意思。
你也能夠把g換成3,6之類的,只在3-6行中搜索。

批處理

在ex中,也能夠用"|"來批處理多條命令,如:

3,6d | g/csprojectedu/nu:刪除3-6行後,打印全部包含csprojectedu的行。

保存和退出文件

Vim實戰指南(一):基礎編輯命令中,咱們介紹過保存和退出文件的方法,實際上:

ZZ:是vi命令行模式下的命令
:q:ex命令,退出文件,若是有未保存的修改則沒法退出
:q!:ex命令:強制退出
:x:ex命令,保存和退出文件
:w:ex命令,保存文件
:w!:ex命令,強制保存
:w another:將文件另存爲文件another
:3,6w another:將3-6行另存爲文件another(編輯神器)
:9,13w >>another:將9-13行追加到文件another後面(編輯神器2)
:r another2:將another2文件的內容追到到當前文件光標後(編輯神器3)
:3r /home/user/another3:將/home/user/another3文件的內容追到到當前文件第3行後(編輯神器4)

編輯神器1-4,是否是很方便?

多文件處理

vi支持多文件處理,同時處理多文件不只節省你屢次打開和退出vi的時間,也可讓你反覆利用vi的緩存區,關於緩存區的說明見Vim實戰指南(三):高級技巧
首先在命令行打開多個文件:

$ vi filename1 filename2

首先打開filename1,你能夠經過ex的命令來切換:

:n:切換到下一個文件
:N:切換到上一個文件
:args:顯示全部文件
:rewind/:rew:跳到第一個文件
:last:跳到最後一個文件

記住,緩存區是公用的,你能夠將filename1中選擇的內容,經過緩存區拷貝到filename2中。

Summary

掌握ex命令後,是否是發現vi愈來愈好用了?彆着急,更強大更好用的ex命令還在後面。

相關文章
相關標籤/搜索