與vi編輯器有關的Linux終端命令

1、vi

  • viLinux系統(tǒng)中最經(jīng)典的文本編輯器。

  • vi的核心設計思想:讓程序員的手指始終保持在鍵盤的核心區(qū)域,就能完成所有的編輯操作。

    鍵盤核心區(qū)域示意圖

  • 沒有圖形界面的環(huán)境下,要編輯文件,vi是最佳的選擇。

  • vi編輯器在系統(tǒng)管理、服務器管理編輯文件時,其功能永遠不是圖形界面的編輯器所能比擬的

  • 在實際應用中,對服務器上的文件進行簡單的修改可使用ssh命令遠程登錄到服務器,并使用vi編輯器進行快速的編輯。

常見需要修改的文件
  • 源程序
  • 配置文件。如:ssh的配置文件~/.ssh/config
vi的特點
  • 沒有圖形界面功能強大的編輯器。
  • 只能是編輯文本內(nèi)容,不能對字體、段落進行排版。
  • 不支持鼠標操作
  • 沒有菜單。
  • 只有命令

2、vi和vim

  • vim是從vi發(fā)展出來的一個文本編輯器,它支持代碼補全編譯錯誤跳轉等方便編程的功能,在程序員中被廣泛使用,被稱為編輯器之神。
  • 在很多Linux發(fā)行版中,直接把vi做成了vim的軟鏈接。也就是說在終端中輸入vi命令打開的是vim文本編輯器。

3、打開和新建文件

vi 文件名
  • 文件已存在,就會打開這個文件。
  • 文件不存在,將會新建一個文件。
打開文件并定位到指定行

在實際應用中,有時候我們需要打開一個文件并定位到指定行。比如,在編譯運行某個程序時,發(fā)現(xiàn)某行代碼有錯誤,就可以使用下面的命令快速定位到出錯代碼的位置。

vi 文件名 +行號
  • 只有+而不指定行號,就會定位到文件的末尾。
  • 只有vi 文件名,則會定位到文件的開頭。

4、異常處理

  • 如果vi異常退出,在磁盤上可能會保存有交換文件。
  • 再次使用vi編輯該文件時,將會看到如下圖所示的提示信息。這時只需按下鍵盤上的 d 鍵刪除交換文件即可。
    異常處理示意圖

5、vi的三種工作模式

1) 命令模式
  • 使用vi打開文件首先進入的是命令模式。命令模式是vi入口。
  • 通過命令對文件進行常規(guī)的編輯操作。包括定位、翻頁、復制、粘貼刪除等等。
  • 其他圖形界面的編輯器中,通過快捷鍵鼠標實現(xiàn)的操作,在終端中都用命令模式來實現(xiàn)。
2) 末行模式
  • 退出vi返回控制臺,需要在末行模式下輸入命令。
  • 末行模式是vi出口。

末行模式命令

命令 作用
:w 保存
:q 退出。如果沒有保存,不允許退出
:q! 強制退出,即不保存退出
:wq 保存并退出
:x 保存并退出
3) 編輯模式
  • 編輯文字。
三種工作模式之間的切換示意圖
在這里插入圖片描述

6、常用命令

  • 重復次數(shù)

命令模式下,先輸入一個數(shù)字,再跟上一個命令(可以是移動選擇命令,也可以是編輯操作命令),可以讓該命令重復執(zhí)行指定次數(shù)

  • 移動和選擇

vi之所以快,關鍵在于能夠快速定位到要編輯的代碼行。

移動命令可以和編輯操作命令組合使用。

  • 編輯操作

刪除、復制、粘貼替換縮排。

  • 撤銷和重復

  • 查找替換

  • 編輯

7、移動命令

  • 、、
命令 作用
h 向左
j 向下
k 向上
l 向右
  • 行內(nèi)移動
命令 作用
w 向后移動一個單詞
b 向前移動一個單詞
0 行首
^ 行內(nèi)的第一個非空字符
$ 行尾
  • 行數(shù)移動
命令 作用
gg 文件頂部
G 文件末尾
ngg 移動到指定數(shù)字的行(其中n為數(shù)字)
nG 移動到指定數(shù)字的行(其中n為數(shù)字)
:n 移動到指定數(shù)字的行(其中n為數(shù)字)
  • 屏幕移動
命令 作用
Ctrl + b 向上翻頁
Ctrl + f 向下翻頁
H 屏幕頂部
M 屏幕中間
L 屏幕底部
  • 段落移動(程序)

在程序開發(fā)過程中,一段功能相關的代碼通常會寫在一起,并且這段代碼之間沒有空行,這就是段落。vi中使用空行來區(qū)分段落。

命令 作用
{ 上一段
} 下一段
  • 括號切換(程序)

在程序中開發(fā)過程中,()、[]{}的使用頻率很高,并且都是成對出現(xiàn)的。

命令 作用
% 括號匹配及切換
  • 標記(程序)
命令 作用
mx 添加標記x,其中x為標記名稱
'x 直接定位到標記x所在的位置
說明
  • 在程序開發(fā)過程中,若某一行代碼需要作稍后處理,就可以對這行代碼進行標記。這樣就可以在需要時快速跳轉回來執(zhí)行其他的編輯操作
  • 標記并不會高亮顯示字體,只是一個隱藏的標記。
  • 標記名稱只能是a~zA~Z之間的任意一個字母。
  • 添加了標記的如果被刪除,則標記也同時被刪除。
  • 其他行中添加了相同名稱的標記,則之前添加的標記會被替換。

8、選中文本

  • vi選中文本,需要先用Visual命令切換到可視模式。
  • vi提供了三種可視模式。
命令 模式 作用
v 可視模式 從光標位置開始選擇文本
V 可視行模式 選中光標經(jīng)過的完整行
Ctrl + v 可視塊模式 選中垂直方向的文本
  • 可視模式下可以與移動命令組合使用。如:ggVG命令能夠選中所有文本。
  • Esc鍵可撤銷選中,返回命令模式。

9、撤銷和恢復撤銷

命令 作用
u 撤銷上一步操作
Ctrl + r 恢復上一步操作

10、 刪除文本

命令 作用
x 刪除光標所在字符,或刪除選中文本
d + 移動命令 刪除移動命令對應的內(nèi)容
dd 刪除光標所在行
D 刪除光標所在位置到行尾之間的內(nèi)容
說明
  • 可視模式選中的文本,無論用x命令還是d命令,都可以刪除選中的文本。
刪除命令和移動命令常見的組合
組合 作用
dw 刪除從光標所在位置到單詞末尾的內(nèi)容
d0 刪除從光標所在位置到行首的內(nèi)容
d} 刪除從光標所在位置到段落結尾的內(nèi)容
ndd 刪除從光標所在行開始往下的(n-1)行(其中n為數(shù)字)
dnG 刪除從光標所在行到指定行號的內(nèi)容(其中n為行號)
d'x 刪除從光標所在行到標記x所在行的內(nèi)容(其中x為標記名稱)
注意
  • 刪除的內(nèi)容包括光標所在的位置以及光標所在的行。

11、復制和粘貼

  • vi提供了一個被復制文本的緩沖區(qū)。
  • 復制命令將選中的文本保存在緩沖區(qū)。
  • 刪除命令刪除的文本也被保存在緩沖區(qū)。
  • 粘貼命令可以將緩沖區(qū)的文本插入到光標所在的位置。
命令 作用
y + 移動命令 復制
yy 復制一行。nyy可復制多行(其中n為數(shù)字)
p 粘貼。np可粘貼多次(其中n為數(shù)字)
說明
  • d、x命令類似于圖形界面的剪切操作(Ctrl + X)。
  • y命令類似于圖形界面的復制操作(Ctrl + C)。
  • p命令類似于圖形界面的粘貼操作(Ctrl + V)。
注意
  • vi的文本緩沖區(qū)只有一個。所以進行多次的復制、剪切操作,之前緩沖區(qū)的內(nèi)容會被覆蓋。
  • vi文本緩沖區(qū)系統(tǒng)剪貼板不是同一個。所以在其他軟件中使用Ctrl + C復制的內(nèi)容,在vi中不能通過p命令粘貼,能在編輯模式下使用鼠標右鍵粘貼。

12、替換

命令 作用 工作模式
r 替換當前字符 命令模式
R 替換光標所在位置及往后的字符 替換模式
說明
  • R命令可進入替換模式,替換完成后按Esc鍵可返回命令模式
  • 替換命令的作用是不進入編輯模式,對文件進行輕量級修改

13、縮排和重復執(zhí)行

  • 在程序開發(fā)過程中,縮排命令對于統(tǒng)一增加代碼的縮進非常有用。
  • 在程序中,縮進通常用來表示代碼的歸屬關系。代碼前面的空格越少,級別越高;代碼前面的空格越多,級別越低
  • 增加縮進:一次性在選中的代碼前增加4個空格。
  • 減少縮進:一次性在選中的代碼前刪除4個空格。
命令 作用
>> 增加縮進
<< 減少縮進
. 重復上次命令
說明
  • 可視模式中,縮排命令只需用一個><。

14、查找

  • 常規(guī)查找
命令 作用
/str 查找str

查找到指定內(nèi)容后,使用Next命令查找下一個出現(xiàn)的位置。

命令 作用
n 查找下一個
N 查找上一個
  • 單詞快速匹配
命令 作用
* 往后查找當前光標所在的單詞
# 往前查找當前光標所在的單詞
說明
  • 查找到的指定內(nèi)容會以高亮的方式顯示。
  • 如果不想看到高亮顯示,查找一個文件中不存在的內(nèi)容即可。

15、查找并替換

  • vi查找和替換命令需要在末行模式下執(zhí)行。
1) 全局替換

一次性替換文件中出現(xiàn)的所有舊文本。

:%s/舊文本/新文本/g
2) 可視區(qū)域替換

可視模式下選中要替換文本,使用下面的命令替換選中文本中出現(xiàn)的所有舊文本。

:s/舊文本/新文本/g
3) 確認替換(推薦使用)

全局替換命令末尾的g改成gc,則在替換時會有提示,這就是確認替換

:%s/舊文本/新文本/gc

提示之后可能要輸入的命令:

命令 作用
y 替換。如果有多個,則一次只替換一個
n 不替換。如果有多個,則一次只取消替換一個
a 替換所有
q 退出替換
l 替換最后一個,并把光標移動到行首
Ctrl + E 向下滾屏
Ctrl + Y 向上滾屏

16、插入

插入命令可以從命令模式切換到編輯模式 。

命令 作用
i 在當前字符前插入文本
I 在行首插入文本
a 在當前字符后插入文本
A 在行尾插入文本
o 在當前行下面插入一空行,并把光標移動到空行行首
O 在當前行上面插入一空行,并把光標移動到空行行首
1) 插入命令與數(shù)字的組合使用
  • 在程序開發(fā)過程中,可能會遇到需要重復N次的情況。

    如:需要在vi中輸入NHello World??砂慈缦虏僮鬟M行:

    ① 首先在命令模式中輸入數(shù)字N,表示要重復N次。
    ② 緊接著輸入i進入編輯模式。
    ③ 在編輯模式中輸入要重復的內(nèi)容,即Hello World
    ④ 最后按Esc鍵從編輯模式返回到命令模式,返回之后vi就會把②、③兩步的操作重復執(zhí)行(N - 1)次。

注意
  • 正常開發(fā)時,進入編輯模式前不要輸入數(shù)字。
2) 利用可視塊給多行代碼添加注釋
  • 在程序開發(fā)過程中,可能會遇到需要一次性給多行代碼添加注釋的情況。

    如:需要給C語言的某一塊代碼添加注釋??砂慈缦虏僮鬟M行:

    ① 首先在命令模式中把光標移動到需要添加注釋的第1行代碼,并按數(shù)字0來到行首。
    ② 緊接著按Ctrl + v進入可視塊模式
    ③ 在可視塊模式中按j鍵向下選中要添加注釋的代碼。
    ④ 再接著輸入I進入編輯模式,并在行首插入注釋符,即//。
    ⑤ 最后按Esc鍵從編輯模式返回到命令模式,返回之后vi就會在之前選中的每一行代碼前插入注釋符//。

注意
  • 可視塊模式中使用i不能進入編輯模式,需要使用I進入編輯模式。

17、末行命令擴展

末行命令主要針對文件進行操作,包括保存退出保存并退出、搜索并替換、另存為、瀏覽文件、新建文件等等。

命令 作用
:e . 打開內(nèi)置的文件瀏覽器,瀏覽當前目錄下的文件。使用j、k、Enter鍵可瀏覽或打開文件
:e 文件名 切換到當前目錄下指定的文件。不需要退出vi
:n 文件名 新建文件
:w 文件名 另存為。編輯的仍然是當前文件,不會切換文件
:%s///gc 確認搜索并替換
說明
  • 切換文件之前,必須保證當前文件已保存
  • 在程序開發(fā)過程中,可以使用w命令進行階段性備份。

18、分屏

分屏命令屬于vi的高級命令,使用它可以同時編輯和查看多個文件。

命令 作用
:sp [文件名] 橫向分屏
:vsp [文件名] 縱向分屏
說明
  • 文件名不知道的情況下,可以使用:sp .命令(或:vsp .命令)。此命令打開的是內(nèi)置的文件瀏覽器,可瀏覽當前目錄下的文件。
切換分屏窗口

分屏窗口基于window,在實際操作時表現(xiàn)為基于Ctrl + W這個快捷鍵。也就是說,使用下面的命令之前需要先按Ctrl + W。

命令 作用
w 切換到一個窗口
r 互換窗口
c 關閉當前窗口
q 退出當前窗口。如果是最后一個窗口,則關閉vi
o 關閉其他窗口
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • vi —— 終端中的編輯器 目標 vi 簡介 打開和新建文件 三種工作模式 常用命令 分屏命令 常用命令速查圖 0...
    醬油哥帶你學閱讀 1,518評論 0 1
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,711評論 0 5
  • 1. 關于Vim vim是我最喜歡的編輯器,也是linux下第二強大的編輯器。 雖然emacs是公認的世界第一,我...
    Dyworldhua閱讀 1,576評論 0 2
  • 目標 vi 簡介 打開和新建文件 三種工作模式 常用命令 分屏命令 常用命令速查圖 01. vi 簡介 1.1 學...
    __深藍__閱讀 517評論 0 1
  • vi —— 終端中的編輯器 目標 vi 簡介 打開和新建文件 三種工作模式 常用命令 分屏命令 常用命令速查圖 0...
    努力爬行中的蝸牛閱讀 816評論 0 0

友情鏈接更多精彩內(nèi)容