Linux vi 編輯器常見命令的使用

Linux vi 編輯器常見命令的使用

Linux下的文本編輯器有很多種,vi 是最常用的,也是各版本Linux的標配。注意,vi 僅僅是一個文本編輯器,可以給字符著色,可以自動補全,但是不像 Windows 下的 word 有排版功能。

vi 是十年磨一劍的產品,雖然命令繁多,并且大多數功能都是依靠鍵盤輸入來完成,但是一旦你熟悉后,會發現 vi 的功能和效率是其他圖形界面編輯器無法比擬的。

Vim 是?Vi?improved 的縮寫,是 vi 的改進版。在Linux中,vi 被認為是事實上的標準編輯器,因為:
  • 所有版本的 Linux 都帶有 vi 編輯器;
  • 占用資源少;
  • 與?ed、ex 等其他編輯器相比,vi 對用戶更加友好。

你可以使用 vi 編輯器編輯現有的文件,也可以創建一個新文件,還能以只讀模式打開文本文件。

進入 vi 編輯器

可以通過以下方式進入 vi 編輯器:
命令描述
vi filename如果filename存在,則打開;否則會創建一個新文件再打開。
vi -R filename以只讀模式(只能查看不能編輯)打開現有文件。
view filename以只讀模式打開現有文件。

例如,使用 vi 編輯器創建一個新文件并打開:
$vi testfile
|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]
豎線(|)代表光標的位置;波浪號(~)代表該行沒有任何內容。如果沒有 ~,也看不到任何內容,那說明這一行肯定是有空白字符(空格、tab 縮進、換行符等)或不可見字符。

工作模式

進一步了解 vi 之前先來了解一下 vi 的工作模式,vi 有三種工作模式:

1) 普通模式

由Shell進入vi編輯器時,首先進入普通模式。在普通模式下,從鍵盤輸入任何字符都被當作命令來解釋。普通模式下沒有任何提示符,輸入命令后立即執行,不需要回車,而且輸入的字符不會在屏幕上顯示出來。

普通模式下可以執行命令、保存文件、移動光標、粘貼復制等。

2) 編輯模式

編輯模式主要用于文本的編輯。該模式下用戶輸入的任何字符都被作為文件的內容保存起來,并在屏幕上顯示出來。

3) 命令模式

命令模式下,用戶可以對文件進行一些高級處理。盡管普通模式下的命令可以完成很多功能,但要執行一些如字符串查找、替換、顯示行號等操作還是必須要進入命令模式。

注意:有些教程中稱有兩種工作模式,是把命令模式合并到普通模式。

工作模式切換:
  • 在普通模式下輸入 i(插入)、c(修改)、o(另起一行) 命令時進入編輯模式;按 esc 鍵退回到普通模式。
  • 在普通模式下輸入冒號(:)可以進入命令模式。輸入完命令按回車,命令執行完后會自動退回普通模式。

提示:如果不確定當前處于哪種模式,按兩次 Esc 鍵將回到普通模式。

退出 vi 編輯器

一般在命令模式下退出 vi 編輯器。

退出命令說明
q如果文件未被修改,會直接退回到Shell;否則提示保存文件。
q!強行退出,不保存修改內容。
wqw 命令保存文件,q 命令退出 vi,合起來就是保存并退出。
ZZ保存并退出,相當于 wq,但是更加方便。

退出之前,你也可以在 w 命令后面指定一個文件名,將文件另存為新文件,例如:
w filename2
將當前文件另存為 filename2。

注意:vi 編輯文件時,用戶的操作都是基于緩沖區中的副本進行的。如果退出時沒有保存到磁盤,則緩沖區中的內容就會被丟失。

移動光標

為了不影響文件內容,必須在普通模式(按兩次 Esc 鍵)下移動光標。使用下表中的命令每次可以移動一個字符:
命令描述
k向上移動光標(移動一行)
j向下移動光標(移動一行)
h向左移動光標(移動一個字符)
l向右移動光標(移動一個字符)

兩點提醒:
  • vi 是區分大小寫的,輸入命令時注意不要鎖定大寫。
  • 可以在命令前邊添加一個數字作為前綴,例如,2j 將光標向下移動兩行。

當然,還有很多其他命令來移動光標,不過記住,一定要在普通模式(按兩次 Esc 鍵)下。

用來移動光標的命令
命令說明
0 或?|將光標定位在一行的開頭。
$將光標定位在一行的末尾。
w定位到下一個單詞。
b定位到上一個單詞。
(定位到一句話的開頭,句子是以?! . ? 三種符號來界定的。
)定位到一句話的結尾。
{移動到段落開頭。&&&&&&
}移動到段落結束。&&&&&&&&&
[[回到段落的開頭處。&&&&&&&&&&
]]向前移到下一個段落的開頭處。&&&&&&&&&&
n|移動到第 n 列(當前行)。
1G移動到文件第一行。
G移動到文件最后一行。
nG移動到文件第 n 行。
:n移動到文件第 n 行。
H移動到屏幕頂部。
nH移動到距離屏幕頂部第 n 行的位置。
M移動到屏幕中間。
L移動到屏幕底部。
nL移動到距離屏幕底部第 n 行的位置。
:xx 是一個數字,表示移動到行號為 x 的行。

控制命令

有一些控制命令可以與 Ctrl 鍵組合使用,如下:
命令描述
CTRL+d向前滾動半屏
CTRL+f向前滾動全屏
CTRL+u向后滾動半屏
CTRL+b向后滾動整屏
CTRL+e向上滾動一行
CTRL+y向下滾動一行
CTRL+I刷新屏幕

編輯文件

切換到編輯模式下才能編輯文件。有很多命令可以從普通模式切換到編輯模式,如下所示:
命令描述
i在當前光標位置之前插入文本
I在當前行的開頭插入文本
a在當前光標位置之后插入文本
A在當前行的末尾插入文本
o在當前位置下面創建一行
O在當前位置上面創建一行

刪除字符

下面的命令,可以刪除文件中的字符或行:
命令說明
x刪除當前光標下的字符
X刪除光標前面的字符
dw刪除從當前光標到單詞結尾的字符
d^刪除從當前光標到行首的字符
d$刪除從當前光標到行尾的字符
D刪除從當前光標到行尾的字符
dd刪除當前光標所在的行

可以在命令前面添加一個數字前綴,表示重復操作的次數,例如,2x ?表示連續兩次刪除光標下的字符,2dd 表示連續兩次刪除光標所在的行。

建議各位讀者多加練習上面的命令,再進一步深入學習。

修改文本

如果你希望對字符、單詞或行進行修改,可以使用下面的命令:
命令描述
cc刪除當前行,并進入編輯模式。
cw刪除當前字(單詞),并進入編輯模式。
r替換當前光標下的字符。
R從當前光標開始替換字符,按 Esc 鍵退出。
s用輸入的字符替換當前字符,并進入編輯模式。
S用輸入的文本替換當前行,并進入編輯模式。

粘貼復制

vi 中的復制粘貼命令:
命令描述
yy復制當前行
nyy復制n行
yw復制一個字(單詞)
nyw復制n個字(單詞)
p將復制的文本粘貼到光標后面
P將復制的文本粘貼到光標前面

高級命令

下面的一些命令雖然看起來有些古怪,但是會讓你的工作更有效率,如果你是 vi 重度用戶,就了解一下吧。
命令說明
J將當前行和下一行連接為一行
<<將當前行左移一個單位(一個縮進寬度)
>>將當前行右移一個單位(一個縮進寬度)
~改變當前字符的大小寫
^GCtrl+G組合鍵可以顯示當前文件名和狀態
U撤銷對當前行所做的修改
u撤銷上次操作,再次按 'u' 恢復該次操作
:f以百分號(%)的形式顯示當前光標在文件中的位置、文件名和文件的總行數
:f filename將文件重命名為 filename
:w filename保存修改到 filename
:e filename打開另一個文件名為 filename 的文件
:cd dirname改變當前工作目錄到 dirname
:e #在兩個打開的文件之間進行切換
:n如果用 vi 打開了多個文件,可以使用 :n 切換到下一個文件
:p如果用 vi 打開了多個文件,可以使用 :n 切換到上一個文件
:N如果用 vi 打開了多個文件,可以使用 :n 切換到上一個文件
:r file讀取文件并在當前行的后邊插入
:nr file讀取文件并在第 n 行后邊插入

文本查找

如果希望進行全文件搜索,可以在普通模式(按兩次 Esc 鍵)下輸入 / 命令,這時狀態欄(最后一行)出現"/"并提示輸入要查找的字符串,回車即可。

/ 命令是向下查找,如果希望向上查找,可以使用 ? 命令。

這時,輸入 n 命令可以按相同的方向繼續查找,輸入 N 命令可以按相反的方向繼續查找。

搜索的字符串中可以包含一些有特殊含義的字符,如果希望搜索這些字符本身,需要在前面加反斜杠(\)。

部分特殊字符列表
字符說明
^匹配一行的開頭
.匹配一個字符
*匹配0個或多個字符
$匹配一行的結尾
[ ]匹配一組字符

如果希望搜索某行中的單個字符,可以使用 f 或 F 命令,f 向上搜索,F 向下搜索,并且會把光標定位到匹配的字符。

也可以使用 t 或 T 命令:t 命令向上搜索,并把光標定位到匹配字符的前面;T 命令向下搜索,并把光標定位到匹配字符的后面。

set 命令

set 命令可以對 vi 編輯器進行一些設置。使用 set 命令需要進入命令模式。

:set 命令選項
命令說明
:set ic搜索時忽略大小寫。
:set ai設置自動縮進(自動對齊)。
:set noai取消自動縮進(自動對齊)。
:set nu顯示行號。
:set sw設置縮進的空格數,例如,將縮進空格數設置為4::set sw=4。
:set ws循環搜索:如果直到文件末尾也沒有查找到指定字符,那么會回到開頭繼續查找。
:set wm設置自動換行,例如,設置距離邊際2個字符時換行::set wm=2 。
:set ro將文件類型改為只讀。
:set term輸出終端類型。
:set bf忽略輸入的控制字符,如 BEL(響鈴)、BS(退格)、CR(回車)等。

運行命令

切換到命令模式,再輸入 ! 命令即可運行 Linux 命令。

例如,保存文件前,如果希望查看該文件是否存在,那么輸入
:! ls
即可列出當前目錄下的文件。

按任意鍵回到 vi 編輯器。

文本替換

切換到命令模式,再輸入 s/ 命令即可對文本進行替換。語法為:
:s/search/replace/g
search 為檢索的文本,replace 為要替換的文本,g 表示全局替換。

幾點提示

vi 編輯器的使用講解完畢,但是請記住下面幾點:
  • 輸入冒號(:)進入命令模式,按兩次 Esc 鍵進入普通模式。
  • 命令大小寫的含義是不一樣的。
  • 必須在編輯模式下才能輸入內容。

轉載于:https://www.cnblogs.com/xyzq/p/7930176.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539948.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539948.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539948.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

給控件添加小圖標

一、效果 二、知識點 三、代碼 <TextViewstyle"style/ContentStyle"android:drawableLeft"android:drawable/star_big_on"android:gravity"center"android:text"遠程鎖屏:#*lockscreen*#" />

加速計算,為何會成為 AI 時代的計算力“新寵”

隨著科技的發展&#xff0c;處理大量數據和進行復雜計算的需求越來越高&#xff0c;人工智能、大數據和物聯網等領域更是如此&#xff0c;傳統的計算方式已經無法滿足這些需求。因此&#xff0c;加速計算作為一種現代計算方式&#xff0c;成了必要的手段。加速計算具有前所未有…

Java中nextfloat怎么用,關于java的nextFloat()后面跟一個nextLine()

ArrayList studentInfors new ArrayList();Scanner sc new Scanner(System.in);for (int i 0; i StudentInfor studentInfor new StudentInfor();System.out.print("請輸入學生學號&#xff1a;");studentInfor.setNum(sc.nextLine());System.out.print("請…

背景選擇器selector替換按鈕默認背景

一、效果 正常狀態 獲取焦點或按下 按鈕的背景圖片是.9圖&#xff0c;.9圖的制作過程&#xff0c;見下面博文 http://blog.csdn.net/zengmingen/article/details/50193245 二、步驟 模仿android自帶的按鈕控件編寫1、找到android自帶按鈕的樣式。D:\ADT\sdk\platforms\andro…

php 取數值整數的函數是,PHP取整數函數常用的四種方法小結

ceil — 進一法取整說明float ceil ( float value )返回不小于 value 的下一個整數&#xff0c;value 如果有小數部分則進一位。ceil() 返回的類型仍然是 float&#xff0c;因為 float 值的范圍通常比 integer 要大。例子 1. ceil() 例子echo ceil(4.3); // 5echo ceil(9.999);…

ios 獲取控件高度

2019獨角獸企業重金招聘Python工程師標準>>> 1.ios 獲取控件相對屏幕的位置 需要獲取的對象為view1&#xff0c;則該視圖相對屏幕的位置可使用下面方法實現&#xff1a; UIWindow * window[[[UIApplication sharedApplication] delegate] window]; CGRect rect[view…

php文件上傳前端頁面樣式,HTML實現美化上傳文件樣式

這篇文章介紹的內容是HTML實現美化上傳文件i樣式 &#xff0c;有著一定的參考價值&#xff0c;現在分享給大家&#xff0c;有需要的朋友可以參考一下傳統寫法上傳文件效果如下圖所示這個樣式調整了很長時間&#xff0c;最后結果都不盡人意。非常規寫法上傳文件上傳給真正的用于…

jquery mobile用代碼彈出dialog

一、點擊彈出dialog 見http://www.w3school.com.cn/jquerymobile/jquerymobile_pages.asp中“將頁面作為dialog”這節二、代碼彈出 思路&#xff1a;模擬一個點擊事件。1、在頁面上隱藏一個<a>,如下 <a id"test" href"#pagetwo" style"displ…

畢設開發日志2017-12-01-Scan超時

【前言】 本篇博客主要描述一下在開發過程中遇到的scan的超時問題。 【問題描述】 剛剛完成了對索引表的定義和建議&#xff0c;并且在單元測試中對該表進行插入和掃描時均未發現錯誤。但是在對該表進行整體更新時&#xff0c;需要在掃描weather表的過程中對該表進行不斷的更新…

ubuntu java 1.6 安裝,ubuntu 中安裝java jdk 1.6

--------------------------------------------------------------------------------------------本文系本站原創,歡迎轉載!轉載請注明出處:http://blog.csdn.net/gdt_a20/article/details/7307681-------------------------------------------------------------------------…

Oracle修改表結構字段名和字段長度

添加字段的語法&#xff1a;alter table tablename add (column datatype [default value][null/not null],….); 修改字段的語法&#xff1a;alter table tablename modify (column datatype [default value][null/not null],….); 刪除字段的語法&#xff1a;alter table tab…

php快速排序實現代碼,快速排序的算法php實現

function qsort(&$arr){_quick_sort($arr, 0, count($arr) - 1);}/*** 采用遞歸算法的快速排序。** param array $arr 要排序的數組* param int $low 最低的排序子段* param int $high 最高的排序字段*/function _quick_sort(&$arr, $low, $high){$low_data $arr[$low…

08-spring學習-annotation配置

利用annotation配置注入關系 為了更好的解釋此類存在的意義&#xff0c;下面通過一段習慣性的開發進行問題的描述&#xff0c;例如&#xff1a; 現在有一個IAdminService服務層&#xff0c;這個服務層要調用的是IAdminDAO和IRoleDAO兩個數據層操作&#xff0c;于是定義如下&…

JQuery 綁定select標簽的onchange事件

原文出處&#xff1a;http://blog.csdn.net/a5489888/article/details/20045175 使用jqm的change事件 <script src"jquery.min.js" type"text/javascript"></script> <script language"javascript" type"text/javascript&q…

Android 6.0 源代碼編譯實踐

前陣子去上海參加 Android 開發面試&#xff0c;被問及了 Android 的基本原理、常用組件背后的實現機制、設計模式等問題&#xff0c;我都回答地不好。面試時&#xff0c;老司機們常常問我對知識點“背后的實現代碼有沒有看&#xff1f;”。于是我就想著&#xff0c;回來要把 A…

php 鏈接遠程oracle,PHP連接遠程oracle輸出數據

遠程連接的連接字符串可以這樣寫oledbconnection 的連接字符串:providermsdaora;host192.168.1.1;data sourcemytest;user idsystem;passwordxxxprovider msdaora; 指明oledb 的提供者是oracle數據庫host 是遠程 oracle 數據庫所在服務器的ip地址&#xff0c;如果端口不是默認…

RNN介紹,較易懂

人類并不是每時每刻都從一片空白的大腦開始他們的思考。在你閱讀這篇文章時候&#xff0c;你都是基于自己已經擁有的對先前所見詞的理解來推斷當前詞的真實含義。我們不會將所有的東西都全部丟棄&#xff0c;然后用空白的大腦進行思考。我們的思想擁有持久性。 傳統的神經網絡并…

android虛擬機鼠標左鍵拖動會輸入C

不知道什么原因&#xff0c;突然出現這個情況&#xff0c;以為是虛擬機壞了。于是刪了&#xff0c;新建&#xff0c;問題還是存在。 問題原因&#xff1a; 后來發現&#xff0c;原來是今天開了有道詞典&#xff0c;又開啟了詞典的劃詞翻譯。 解決方法&#xff1a; 關閉劃詞翻譯…

php生成圖片水印,PHP生成圖片加文字及圖案水印辦法

工作中&#xff0c;各種語言都要會&#xff0c;但不是各種語言都記到腦子里&#xff0c;常常要查字典、查手冊、以及百度對于PHP生成圖片加文字及圖案水印這項技巧&#xff0c;好久沒有用&#xff0c;又有些生疏了&#xff0c;現在來溫故知新&#xff0c;加深記憶&#xff01;代…

易飛揚宣布完成100G CWDM4PSM4光模塊量產線建設

訊&#xff0c;易飛揚即日宣布量產兩款高性能的100G光模塊&#xff1a;100G QSFP28 CWDM4 和100G QSFP28 PSM4。兩種產品采用同一個技術平臺和生產平臺。本次建設投產的CWDM4/PSM4 車間為萬級無塵恒溫恒濕車間&#xff0c;面積2000平米&#xff0c;配置有3套全自動高精密WIRE B…