Linux高級編程--01.vi命令

VI是Linux/Unix下標配的一個純字符界面的文本編輯器。由于不支持鼠標功能,也沒有圖形界面,相關的操作都要通過鍵盤指令來完成,需要記憶大量命令。因此很多人不大喜歡它,但同時由于鍵盤的方式往往比鼠標來得快,一旦熟練后用起來是有種非常流暢的感覺的,也有人因此而非常喜歡它。

不管你喜歡也好,不喜歡也好,VI是Linux的標配編輯器,很多時候你也只有這一個編輯器可用,如果要做一個Linux Coder,熟悉VI還是非常有必要的。

PS:由于VI的命令非常多,本文主要只介紹一些基礎命令。并且就算是這些基礎命令中,也有許多是不大常用的,我就把這些命令以灰色文字顯示了,初學者可以不用太關注這些灰色命令。

兩種工作模式

前面已經說過,由于VI沒有圖形界面,如翻頁、移動光標、保存、退出等操作都必須借助鍵盤來完成。另外,VI還提供了大量快捷鍵來加速操作,因此,VI統的編輯模式下,還引入了一種新的工作模式——命令模式。

編輯模式: 在此模式下,輸入可見字符時和傳統Windows環境下輸入字符的功能相同。按Esc鍵可切換值命令模式。
命令模式: 在此模式下,輸入的可見字符對應的是命令。當插入命令執行后進入編輯模式。

PS:有的文章中還列舉了一種Last Line模式,這個可以算作一種特殊的命令模式,只不過命令會顯示在最后一行,并且需要敲回車才能執行。這些命令通常以 :/?$ 等特殊字符開頭。

模式查詢:要判斷當前處于那種模式,可以通過最后一行(狀態欄)來判斷:如果處于編輯模式,則顯示為如下兩種狀態。

模式間的切換:在編輯模式下,通過Esc鍵可以進入命令模式;命令模式下,執行某些插入命令后進入編輯模式。如果你不知道當前處于那種模式下,按ESC進入命令模式,按Insert進入編輯模式。

啟動VI

VI的啟動參數有不少,但通常的使用方式如下:vi filename

如果參數中的文件存在,則打開該文件,如果參數中的文件不存在,則會新建該文件(不是立即創建,而是在保存的時候創建)。

插入文本

剛進入VI時,是出于命令模式的,這是是無法輸入文本的,因此需要進入插入模式。進入插入模式的命令有如下幾個:

i    從目前光標所在之處插入文字
a    從目前光標所在下一個字符插入文字
o    往下插入一個空行
O    往上插入一個空行

輸入這幾個命令后,就進入了編輯模式,可以通過屏幕下方最后一行看到當前為插入狀態:

可以通過Insert鍵切換插入狀態和改寫狀態(和圖像界面中一樣)。

另外,在命令模式下,也可以通過Insert鍵進入編輯模式(插入狀態),不過通常還是前面介紹的四個命令來進入編輯模式。

離開和保存文件

在VI中,離開和保存文件對應的命令有這幾個(使用前記得進入命令模式):

:w            保存
:w filename     另存為
:wq            保存并退出 [常用]
:q!            強制退出
SHIFT+zz        保存并退出,功能同:wq [常用]

移動光標

在VI中,移動光標并不是我們游戲中常用的WASD,而是h、j、k、l,分別控制光標左、下、上、右移一格,分別分布在右手四個指頭,新手需要一段時間來適應。使用非常頻繁,需要熟練掌握。

其它一些光標控制命令如下:

Ctrl+B:屏幕往后移動一頁。
Ctrl+F:屏幕往前移動一頁。
Ctrl+U:屏幕往后移動半頁。
Ctrl+D:屏幕往前移動半頁。
gg:移動文章的開頭。
G:移動到文章的最后。
w:光標跳到下個word的開頭。
e:光標跳到下個word的字尾。
b:光標回到上個word的開頭。
$:移到光標所在行的行尾。
^:移到該行第一個非空白的字符。
0:移到該行的開頭位置。
#:移到該行的第#個位置,例:51、121。

另外,還有幾個行操作相關命令集中介紹一下

:set nu        顯示行號
:set nonu        隱藏行號
:#            移動到第#行,如:15
Ctrl+G:     在狀態欄顯示當前進度
#G:        移動到第#行,例:15G

刪除文字

x:刪除光標所在位置的后面一個字符。
#x:例如,6x 表刪除光標所在位置的后面6個字符。
X:大字的X,每按一次刪除光標所在位置的前面一個字符。
#X:例如,20X 表刪除光標所在位置的前面20個字符。
dd:刪除光標所在行。
#dd:例如,6dd表刪除從光標所在的該行往下數6行之文字。

復制粘貼

我個人并不是很習慣VI提供的復制粘貼,由于沒有高亮選中,用起來感覺不是很方便。平時大都是用的終端工具的復制粘貼功能,因此這里的命令我都加灰了,感興趣的可以看看。

yw:將光標所在處到字尾的字符復制到緩沖區中。
p:將緩沖區內的字符粘貼到光標所在位置(指令'yw'與'p必須搭配使用)。
yy:復制光標所在行。[超常用]
p:復制單行到您想粘貼之處。(指令'yy'與'p'必須搭配使用)
#yy:如:6yy表示拷貝從光標所在的該行往下數6行之文字。[常用]
p: 復制多行到您想粘貼之處。(指令'#yy'與'p'必須搭配使用)
ayy:將復制行放入buffer a, vi提供buffer功能,可將常用的數據存在buffer
ap:將放在buffer a的數據粘貼。
b3yy:將三行數據存入buffer b。
b3p:將存在buffer b的資料粘貼

撤銷和重做

撤銷和重做在任何編輯器里都是非常有用的命令:

u:假如您誤操作一個指令,可以馬上按u,回復到上一個操作。
.: 重復執行上一次的指令

查找和替換

查找和替換的語法筆記復雜,先簡單的介紹一下查找的語法:

/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter> :向上查找pattern匹配字符串

使用了查找命令之后,使用如下兩個鍵快速查找:

n:按照同一方向繼續查找
N:按照反方向查找

至于替換的語法,限于篇幅所限,這里就不介紹了,給一個鏈接供大家參考一下:http://blog.csdn.net/lanxinju/article/details/5731843。

VI對編程的支持

VI對編程還是提供了一定的支持的。例如,它是支持括號配對、語法高亮顯示的。

不過,由于并不支持語法解析功能,作為編碼工具和專業的代碼編輯器如SourceInsight、VisualStudio等比起來還是有很大差距的。個人感覺做小型項目和臨時修改代碼用還行,但做大型項目是有點力不從心的。



來自為知筆記(Wiz)


轉載于:https://www.cnblogs.com/linzhenjie/p/5485530.html

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

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

相關文章

【數據庫學習】——糾錯:mysql Authentication plugin ‘caching_sha2_password‘ is not supported

目錄 1、環境介紹 2、問題描述 3、原因分析 4、 解決方案 1&#xff09;方法一&#xff1a;直接改成mysql_native_password驗證方式 2&#xff09;方案二&#xff1a; 利用sql命令將驗證機制修改 ① 打開命令行窗口——cmd ② 登錄mysql數據庫 ③ 查看不同用戶名的身份…

xcode中用pods管理第三方庫轉

安裝pods &#xff1a;http://www.cnblogs.com/wangluochong/p/5567082.html 史上最詳細的CocoaPods安裝教程 --------------------------------------------- 第一步&#xff1a;Cmmand&#xff0b;空格&#xff0c;搜索"終端"&#xff0c;使用cd命令進入到我們項目…

Val編程-界面編程

由于示教盒是一個黑白的分辨率為&#xff08;14*40&#xff09;的液晶屏&#xff0c;用戶交互不是很好&#xff0c;界面不友好。而且沒有鼠標導航與觸摸屏。 界面編程函數 1.void cls() 2.void title(string sText) 3.void put(string sText), void put(num nValue) 4.void put…

【機器學習筆記四】分類算法 - 邏輯回歸

參考資料 【1】 Spark MLlib 機器學習實踐 【2】 統計學習方法 1、Logistic分布 設X是連續隨機變量&#xff0c;X服從Logistic分布是指X具有下列分布函數和密度函數 &#xff0c;。其中u為位置參數&#xff0c;γ為形狀參數。如下圖&#xff1a; 分布函數以(u,1/2)為中心…

FPFH+ICP點云配準

A, UniformSampling降噪B, ISS計算關鍵點, FPFH特征在FeatureCloud::setInputCloud中讀入點云,并調用processInput進行處理:processInput處理包括: 1, computeSurfaceNormals () 使用NormalEstimation計算得到表面法向量2, computeLocalFeatures () FPFHEstimationKdTreeIS…

【python 學習】——pycharm終端解釋器和Python解釋器配置

目錄 1、pycharm終端運行的時候前面帶有PS&#xff0c;是什么意思&#xff0c;怎么變成cmd? 1&#xff09;File——settings 2&#xff09;tools——terminal——shellPath 2、pycharm怎么切換不同的Python解釋器&#xff1f; 1&#xff09;File——settings 2&#xff09…

在linux下實現mysql自動備份數據

使用的系統為CentOS&#xff0c;mysql版本為5.6 備份功能主要利用以下功能實現&#xff1a; mysql命令中的mysqldump命令 linux下腳本編寫 linux下crontab定時任務的使用 首先確定你要存放腳本的目錄和存放備份數據的目錄 首先進行以下修改&#xff08;因為在命令行或者腳本中寫…

面向未來編程

我們一直以來都知道面向對象編程&#xff0c;面向過程編程。大多數時候還是面向工資編程&#xff0c;面向生活編程。面向任務編程&#xff0c;面向公司編程&#xff0c;面向領導編程。 工資不給力&#xff0c;心里認為委屈&#xff1b;生活有壓力。影響工作情緒。任務完畢就好…

Plotclock

調試程序&#xff0c;運行調試程序&#xff0c;舵機會移動兩只懸臂分別停留在一只水平另一只垂直的位置上。如果差距非常大&#xff0c;可拆下懸臂調節&#xff0c;如果比較接近了&#xff0c;就修改程序第3~6行的四個參數 SERVOFAKTORLEFT 左懸臂垂直位置&#xff0c;SERVOFAK…

js性能優化--學習筆記

《高性能網站建設進階指南》&#xff1a; 1.使用局部變量&#xff0c;避免深入作用域查找&#xff0c;局部變量是讀寫速度最快的&#xff1b;把函數中使用次數超過一次的對象屬性和數組存儲為局部變量是一個好方法&#xff1b;比如for循環中的.length通常可以保存為局部變量。 …

struct和typedef struct在C與C++中用法

struct和typedef struct 分三塊來講述&#xff1a;   1 首先&#xff1a;//注意在C和C里不同     在C中定義一個結構體類型要用typedef:     typedef struct Student    {    int a;    }Stu;     于是在聲明變量的時候就可&#xff1a;Stu stu1;(如…

【數據庫學習】——Python實現mysql數據庫SQL文件生成和導入

目錄 1、將mysql數據導出到SQL文件中&#xff08;數據庫存在的情況&#xff09; 2、將現有的sql文件數據導入到數據庫中&#xff08;前提數據庫存在&#xff09; 3、利用Navicat導出SQL文件和導入SQL文件 1&#xff09;從數據庫導出SQL文件 2&#xff09;導入SQL文件到數據…

lfcp——PB使用

場景&#xff1a;記錄以備忘。 1 直接說明 pb連接說明&#xff1a;目前項目共有性能、功能、業務、聯調四個環境。所以pb可以連接四個不同的數據庫。1.copy一份pb程序&#xff0c;修改main.ini文件中的DBCONNECT/DBCONNECT2位new&#xff0c;DBNAME/DBNAME2為oracle數據源中的源…

【重磅】Google官方推出了免費的、中文的、機器學習初級課程。

2019獨角獸企業重金招聘Python工程師標準>>> 機器學習(Machine Learning, ML)是一門多領域交叉學科&#xff0c;涉及概率論、統計學、逼近論、凸分析、算法復雜度理論等多門學科。它是人工智能的核心&#xff0c;是使計算機具有智能的根本途徑&#xff0c;其應用遍及…

市面上常見arduino版本比較

http://arduino.cc/en/Main/Products 詳細鏈接 如果是入門&#xff0c;那么首選UNO R3&#xff0c;方便又省心 如果不是特殊要求&#xff0c;不建議購買2560&#xff0c;因為貴啊 nano是塊很好的控制器&#xff0c;買不買隨你咯 非特殊場合使用不建…

leetcode-114. Flatten Binary Tree to Linked List

Given a binary tree, flatten it to a linked list in-place. For example,Given 1/ \2 5/ \ \3 4 6The flattened tree should look like: 1\2\3\4\5\6思路&#xff1a;遞歸處理&#xff0c;引用二叉鏈表的思想&#xff0c;使用pre記錄上一個分支的指針。Accepted Co…

HALCON示例程序autobahn高速公路車道識別程序剖析

HALCON示例程序autobahn高速公路車道識別程序剖析 小哥哥小姐姐覺得有用點個贊唄&#xff01; 示例程序源碼&#xff08;加注釋&#xff09; *關閉halcon窗口的實時更新 dev_update_window (‘off’) *關閉halcon圖形窗口 dev_close_window () *打開圖形窗口 *dev_open_win…

CSS中的未定義行為,瀏覽器的差異(一)

今天看了張鑫旭大佬的新書的有感吧&#xff0c;記錄一下。 Web標準未對一些場景做出明確規范&#xff0c;所以各大瀏覽器廠家只能根據自己的理解和喜好去實現&#xff0c;表現差異不是瀏覽器的bug&#xff0c;用計算機領域的術語描述為"未定義行為"。 比如一個例子&a…

KVC 和 KVO

作者 沖破繭縛 2015.08.28 16:12* 寫了3967字&#xff0c;被8人關注&#xff0c;獲得了14個喜歡KVC 和 KVO 字數363 閱讀32 評論0 喜歡0KVC (Key Value Coding)&#xff0c;鍵值編碼&#xff0c;通過鍵值&#xff08;字符串&#xff09;來訪問屬性的機制&#xff0c;來間接修改…

Atmel megaAVR控制器 串行引導Bootloader

開始研究下Bootloader的代碼結構 2015.1.9 粗略看了下&#xff0c;Bootloader主要做了下板卡的初始化 -----> 然后進入for( ; ; )死循環 -----> 循環刷新串口數據 -----> 根據數據做出不同應答 -----> 如果有寫數據&#xff0c;則將數據存入buffer …