網站首頁 編程語言 正文
一、簡介
Linux下的文本編輯器有很多種,vi 是最常用的,也是各版本Linux的標配。注意,vi 僅僅是一個文本編輯器,可以給字符著色,可以自動補全,但是不像 Windows 下的 word 有排版功能。?
vi 是十年磨一劍的產品,雖然命令繁多,并且大多數功能都是依靠鍵盤輸入來完成,但是一旦你熟悉后,會發現 vi 的功能和效率是其他圖形界面編輯器無法比擬的。?
在Linux中,vi 被認為是事實上的標準編輯器,因為:
- 所有版本的 Linux 都帶有 vi 編輯器;
- 占用資源少;
- 與 ed、ex 等其他編輯器相比,vi 對用戶更加友好。
你可以使用 vi 編輯器編輯現有的文件,也可以創建一個新文件,還能以只讀模式打開文本文件。
二、安裝VIM
Vim 是?Vi?improved 的縮寫,是 vi 的改進版。vim是Linux下最常用的文本編譯器,在終端輸入vim時可能會出現
Connand 'vim' not found, but can be installed with:
這是因為默認的文本編譯器是vi, 而沒有安裝或者升級vim的緣故
1、 Ctrl + Alt +T 進入終端,安裝vim:
sudo apt-get install vim
2、安裝完成后即可使用vim,輸入vim查看:
美化vim
剛安裝的VIM,可能界面并不是十分友好,我們可以更改vim的配置文件,按照我們的需求去修改它。在命令行下,輸入命令:注意: 必須加上sudo,否則你是沒有權限編輯vimrc的。
sudo vim /etc/vim/vimrc
在這個文件中可以看到有下面這個if判斷,意思是語法高亮,如果是被注釋掉狀態,可以將其放開:
if has("syntax")
syntax on
endif
"設置左側行號
set nu
"設置tab鍵長度為4
set tabstop=4
"突出顯示當前行
set cursorline
"在右下角顯示光標位置的狀態行
set ruler
"自動縮進
set autoindent
"覆蓋文件時不備份
set nobackup
編輯完成后使用 :wq 進行保存退出?
說明: 冒號結束編輯 ,w為保存 q為退出 如果你想放棄也可以 q!為強制退出
三、進入 vi\VIM 編輯器
可以通過以下方式進入 vi 編輯器:
- vi?filename:如果filename存在,則打開;否則會創建一個新文件再打開。
- vi -R?filename:以只讀模式(只能查看不能編輯)打開現有文件。
- view?filename:以只讀模式打開現有文件。
- VIM同上的命令。
例如,使用 vi 編輯器創建一個新文件并打開:
$ vi testfile
|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]
豎線(|)代表光標的位置;波浪號(~)代表該行沒有任何內容。如果沒有 ~,也看不到任何內容,那說明這一行肯定是有空白字符(空格、tab 縮進、換行符等)或不可見字符。
四、工作模式
三種工作模式:
-
普通模式?
由Shell進入vi編輯器時,首先進入普通模式。在普通模式下,從鍵盤輸入任何字符都被當作命令來解釋。普通模式下沒有任何提示符,輸入命令后立即執行,不需要回車,而且輸入的字符不會在屏幕上顯示出來。?
普通模式下可以執行命令、保存文件、移動光標、粘貼復制等。
工作模式切換:
- 在普通模式下輸入?i(插入)、c(修改)、o(另起一行)?命令時進入編輯模式;按?esc 鍵退回到普通模式。
- 在普通模式下輸入冒號(:)可以進入命令模式。輸入完命令按回車,命令執行完后會自動退回普通模式。?
提示:如果不確定當前處于哪種模式,按兩次 Esc 鍵將回到普通模式。
-
編輯模式?
編輯模式主要用于文本的編輯。該模式下用戶輸入的任何字符都被作為文件的內容保存起來,并在屏幕上顯示出來。 -
命令模式?
命令模式下,用戶可以對文件進行一些高級處理。盡管普通模式下的命令可以完成很多功能,但要執行一些如字符串查找、替換、顯示行號等操作還是必須要進入命令模式。?
注意:有些教程中稱有兩種工作模式,是把命令模式合并到普通模式。
五、退出 vi 編輯器
一般在命令模式下退出 vi 編輯器。
- q?:如果文件未被修改,會直接退回到Shell;否則提示保存文件。
- q!?:強行退出,不保存修改內容。
- wq?:w 命令保存文件,q 命令退出 vi,合起來就是保存并退出。
- ZZ?:保存并退出,相當于 wq,但是更加方便。
退出之前,你也可以在 w 命令后面指定一個文件名,將文件另存為新文件,例如:將當前文件另存為 filename2。
w 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 行的位置。
- :x:x 是一個數字,表示移動到行號為 x 的行。
七、控制命令
有一些控制命令可以與 Ctrl 鍵組合使用,一定要在普通模式(按兩次 Esc 鍵)下。如下:
- CTRL+d:向前滾動半屏
- CTRL+f:向前滾動全屏
- CTRL+u:向后滾動半屏
- CTRL+b:向后滾動整屏
- CTRL+e:向上滾動一行
- CTRL+y:向下滾動一行
- CTRL+I:刷新屏幕
八、編輯文件
切換到編輯模式下才能編輯文件。有很多命令可以從普通模式切換到編輯模式,如下所示:
- i:在當前光標位置之前插入文本
- I:在當前行的開頭插入文本
- a:在當前光標位置之后插入文本
- A:在當前行的末尾插入文本
- o:在當前位置下面創建一行
- O:在當前位置上面創建一行
撤銷命令:
- u: 一步一步撤銷
- Ctr-r: 反撤銷
重復命令:
- .: 重復上一次操作的命令
九、刪除字符
下面的命令,可以刪除文件中的字符或行:
- 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:將當前行和下一行連接為一行
- <<:將當前行左移一個單位(一個縮進寬度)
- >>:將當前行右移一個單位(一個縮進寬度)
- ~:改變當前字符的大小寫
- ^G:Ctrl+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?向下搜索,并且會把光標定位到匹配的字符。?
t?命令向上搜索,并把光標定位到匹配字符的前面;T?命令向下搜索,并把光標定位到匹配字符的后面。
十四、set 命令
set 命令可以對 vi 編輯器進行一些設置。使用 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 表示全局替換。
:%s/原有字符/替換后字符 ##只替換每一行中出現的第一個原有字符
:%s/原有字符/替換后字符/g ##替換所有
:1,5s/原有字符/替換后字符/g ##替換1-5行
十七、幾點提示
vi 編輯器的使用講解完畢,但是請記住下面幾點:
- 輸入冒號(:)進入命令模式,按兩次 Esc 鍵進入普通模式。
- 命令大小寫的含義是不一樣的。
- 必須在編輯模式下才能輸入內容。
十八、最全VI\Vim快捷鍵鍵位圖
原文鏈接:https://www.cnblogs.com/springsnow/p/12193122.html
相關推薦
- 2022-02-11 tomcat?logs?目錄下各日志文件的解析(小結)_Tomcat
- 2022-10-26 C語言實現自行車管理系統_C 語言
- 2022-06-08 Field setAccessible()方法的作用及應用場景
- 2023-01-18 pip?search報錯問題及解決_python
- 2022-09-18 ASP.NET?Core實現文件上傳和下載_實用技巧
- 2023-02-14 使用PowerShell獲取Trustedinstaller權限的問題_PowerShell
- 2022-07-02 如何對numpy?矩陣進行通道間求均值_python
- 2022-11-08 uni.showToast和uni.navigateTo不能同時執行 , 怎么解決
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支