7 打開文件

 

 

 

 

7. vi--終端中的編輯器


目標


  • vi簡介
  • 打開和新建文件
  • 三種工做模式
  • 經常使用命令
  • 分屏命令
  • 經常使用命令速查圖

7.1 vi簡介


7.1.1 學習vi目的

  • 在工做中,要對服務器上的文件進行簡單的修改,可使用ssh遠程登陸到服務器上,而且使用vi進行快遞的編輯便可
  • 常見須要修改的文件包括:
    • 源程序
    • 配置文件,例如ssh的配置文件~/.ssh/config
      • 在沒有圖形界面的環境下,要編輯文件,vi是最佳選擇!
      • 每個要是用Linux的程序員,都應該或多或少學習一些vi的經常使用命令

7.1.2 vi 和vim

vijavascript

  • viVisual interface的簡稱,是Linux最經典的文本編輯器
  • vi的核心設計思想--讓程序員的手指始終保持在鍵盤的核心區域,就能完成全部的編輯操做
  • vi的特色:
    • 沒有圖形界面功能強大的編輯器
    • 只能是編輯文本內容,不能對字體、段落進行排版
    • 不支持鼠標操做
    • 沒有菜單
    • 只有命令
  • vi編輯器在系統管理、服務器管理編輯文件時,其功能永遠不是圖形界面的編輯器能比擬的

vim vim=vi improvedcss

  • vim是從vi發展出來的一個文本編輯器,支持代碼補全、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被普遍使用。 ``` # 查找vi的運行文件

$ which vihtml

$ ls -l /usr/bin/vihtml5

$ ls -l /etc/alternatives/vijava

$ ls -l /usr/bin/vim.basicpython

查找vim的運行文件

$ which vimjquery

$ ls -l /usr/bin/vimlinux

$ ls -l /etc/alternatives/vimandroid

$ ls -l /usr/bin/vim.basiccss3

7.2 打開和新建文件

  • 在終端中輸入vi後面跟上文件名便可
    $ vi 文件名
    • 若是文件已經存在,會直接打開該文件
    • 若是文件不存在,會新建一個文件

7.2.1 打開文件而且定位行

  • 在平常工做中,有可能會遇到打開一個文件,而且定位到指定行的狀況
  • 例如:在開發時,知道某一行代碼錯誤,能夠快速定位到出錯代碼的位置
  • 這個時候,可使用一下命令打開文件
$ vi 文件名 +行數

提示:若是隻帶上+而不指定行號,會直接定位到文件末尾

7.2.2 異常處理

  • 若是vi異常退出,在鍵盤上可能會保存有交換文件
  • 下次在使用vi編輯該文件時,會看到一下屏幕信息,按下字母d能夠刪除交換文件便可

    提示:按下鍵盤時,注意關閉輸入法

 

 

 

7.3 三種工做模式

  • vi有三種基本工做模式:

    1. 命令模式
    2. 打開文件首先進入命令模式,是使用vi入口
    3. 經過命令對文件進行常規的編輯操做,例如:定位、翻頁、複製、粘貼、刪除...
    4. 在其餘圖形編輯器下,經過快捷鍵或者鼠標實現的操做,都在命令模式下實現
    5. 末行模式---執行保存、退出等操做
      • 要退出vi返回到控制檯,須要再末行模式下輸入命令
      • 末行模式vi出口
    6. 編輯模式--正常的編輯文字

       

       

     

    提示:在Touch Bar的Mac電腦上,按ESC 末行命令模式

命令 英文 功能
w write 保存
q quit 退出,若是沒有保存,不容許退出
q! quit 強行退出,不保存退出
wq write&quit 保存而且退出
x   保存而且退出
 

7.4經常使用命令


命令線路圖
  1. 重複次數
  2. 在命令模式下,先輸入一個數字,再跟上一個命令,可讓該目錄重複執行指定次數
  3. 移動和選擇(多練)
  4. vi之因此塊,關鍵在於可以快速定位到編輯的代碼行
  5. 移動命令可以和編輯操做命令組合使用
  6. 編輯操做
  7. 刪除、複製、粘貼、替換、縮排
  8. 撤銷和重複
  9. 查找替換
  10. 編輯

提示: 在使用vi命令時,注意關閉中午輸入法

7.4.1 移動(基本)

  • 要熟練使用vi,首先應該學會怎麼使用命令模式下快速移動光標
  • 編輯操做命令,可以和移動命令結合在一塊兒使用

1)上、下、左、右

命令 功能 手指
h 向左 食指
j 向下 食指
k 向上 中指
l 向右 無名指

 

 

 

2)行內移動

命令 英文 功能
w word 向後移動一個單詞
b back 向前移動一個單詞
0   首行
^   行首,第一個不是空白字符的位置
$   行尾

3) 行數移動

命令 英文 功能
gg go 文件頂部
G go 文件末尾
數字gg go 移動到數字對應行數
數字G go 移動到數字對應的行數
:數字   移動到數字對應的行數

4)屏幕移動

命令 英文 功能
Ctrl+b back 向上翻頁
Ctrl+f forward 向下翻頁
H Head 屏幕頂部
M Middle 屏幕中間
L Low 屏幕底部

7.4.2 移動(程序)

1)段落移動

  • vi中使用空行來區分段落
  • 在程序開發時,一般一段功能相關的代碼會寫在一塊兒--之間沒有空行
命令 功能
{ 上一段
} 下一段

2)括號切換

  • 在程序世界中,()[]{}、使用頻率很高,並且都是成對出現的
命令 功能
% 括號匹配及切換

3)標記

  • 在開發時,某一塊代碼可能須要稍後處理,例如:編輯、查看
  • 此時先使用m增長一個標記,這樣能夠在須要時快速第跳轉回來或者執行其餘編輯操做
  • 標記名稱能夠是a~z或者A~Z之間的任意一個字母
  • 添加了標記的行若是被刪除,標記同時被刪除
  • 若是在其餘行添加了相同名稱的標記,以前添加給
命令 英文 功能
mx mark 添加標記x,x是a-z 或者A-Z
`x   直接定位到標記x 所在位置

7.4.3 選中文本(可視模式)

  • 學習複製命令前,應該先學會怎麼樣選中要複製的代碼
  • vi中要選擇文本,須要先使用Visual命令切換到可視模式
  • vi中提供了三種可視模式,能夠方便選中文本的方式
  • ESC能夠放棄選中,返回到命令模式
命令 模式 功能
v 可視模式 從光標位置開始按照正常模式選擇文本
V 可視行模式 選中光標通過的完整行
Ctrl+v 可視塊模式 垂直方向選中文本
  • 可視模式下,能夠和移動命令連用,例如:ggVG可以選中多有內容

7.4.4 撤銷和恢復撤銷

  • 在學習編輯前,先要知道怎樣撤銷以前一次的錯誤的編輯動做!
命令 英文 功能
u undo 撤銷上次命令
CTRL+r redo 恢復撤銷的命令

7.4.5 刪除文本

命令 英文 功能
x cut 刪除光標所在字符,或者選中文字
d(移動命令) delete 刪除移動命令對應的內容
dd delete 刪除光標所在行,能夠ndd複製多行
D delete 刪除至行尾

提示:若是使用可視模式已經選中了一段文本,那麼不管使用d仍是x,均可以刪除選中文本 *刪除命令能夠和移動命令連用,如下是常見的組合命令:

* dw               # 從光標位置刪除到單詞末尾
* d0               # 從光標位置刪除到一行的起始位置
* d}               #從光標位置刪除到段落結尾
* ndd              #從光標位置向下連續刪除n行
* d代碼行G           #從光標所在行 刪除到 指定代碼行 之間的全部代碼
* d`a              #從光標所在行 刪除到 標記a 之間的全部代碼

7.4.6 複製、粘貼

  • vi中提供有一個被複制文本的緩衝區
    • 複製命令將選中的文字保存在緩衝區
    • 刪除命令刪除的文字會被保存在緩衝區
    • 在須要的位置,使用粘貼命令能夠將緩衝區的文字插入到光標所在位置
命令 英文 功能
y(移動命令) copy 複製
yy copy 複製一行,能夠nyy複製多行(n:是數字)
p paste 粘貼

提示:

  • 命令dx相似於圖形界面的剪切操做--CRTL+X
  • 命令y相似於圖形界面的複製操做--CRTL+C
  • 命令p相似於圖形界面的粘貼操做--CRTL+V
  • vi中的文本緩衝區統樣只有一個,若是後續作過複製、剪切操做,以前緩衝區中的內容會被替換

注意: *vi中的文本緩衝區和系統的剪貼板不是同一個

  • 因此在其餘軟件中使用CTRL+C複製的內容,不能在vi中經過p命令粘貼
  • 能夠在編輯模式下使用鼠標右鍵粘貼

7.4.7 替換

命令 英文 功能 工做模式
r replace 替換當前字符 命令模式
R replace 替換當前行光標後的字符 替換模式
  • R命令能夠進入替換模式,替換完成後,按下ESC能夠回到命令模式
  • 替換命令的做用就是不用進入編輯模式,對文件進行輕量級的修改

7.4.8 縮進和重複執行

命令 功能
>> 向右增長縮進
<< 向左增長縮進
. 重複上次命令
  • 縮排命令在開發程序時,統一增長代碼的縮進比較有用!
    • 一次性在選中代碼前增長4個空格,就叫作增長縮進
    • 一次性在選中代碼前刪除4個空格,就叫作減小縮進
  • 可視模式下,縮排命令只須要使用一個>或者<

    在程序中,縮進一般用來表示代碼的歸屬關係

    • 前面的空格越少,代碼級別越高
    • 前面的空格越多,代碼級別越低

7.4.9 查找

命令 功能
/str 查找str
  • 查找到指定內容後,使用Next查找下一個出現的位置:
    • n:查找下一個
    • N:查找上一個
  • 若是不想看到高亮顯示,能夠隨便查找一個不存在的內容便可

單詞快速匹配 命令|功能 -|- .|向後查找當前光標所在單詞

|向前查找當前光標所在單詞

  • 在開發中,經過單詞快速匹配,能夠快速看到單詞在其餘位置使用過的位置

7.4.10 查找並替換

  • vi中查找和替換命令須要再末行模式執行
  • 記憶命令格式:
    :%s///g

1)全局替換

  • 一次性替換文件中的全部出現的舊文本
  • 命令格式以下:
    :%s/舊文本/新文本/g

2)可視區域替換

  • 先選中要替換的文字範圍
  • 命令格式以下:
    :s/舊文本/新文本/g

3)確認替換

  • 若是把末尾g改爲gc在替換的時候,會有提示!
  • 命令格式以下:
    :s/舊文本/新文本/gc
  • y-yes替換
  • n-no替換
  • a-all替換全部
  • q-quit退出替換
  • l-last最後一個,並把光標移到到行首
  • CTRL+E向下滾動
  • CTRL+Y向上滾動

7.4.11 插入命令

  • vi中除了經常使用的i進入編輯模式外,還提供一下命令一樣能夠進入編輯模式
命令 英文 功能 經常使用
i insert 在當前字符前插入文本 經常使用
I insert 在行首插入文本 較經常使用
a append 在當前字符後添加文本  
A append 在行末添加文本  
o   在當前行後面插入一空行 經常使用
O   在當前行前面插入一空行 經常使用

 

 

練習1--編輯命令和數字連用

  • 在開發中,可能會遇到連續輸入N個一樣的字符

    Python中有簡單的方法,可是其餘語言中一般須要本身輸入

  • 例如:**********連續10個星號 要實現這個效果能夠在命令模式
  • 輸入10,表示要重複10次
  • 輸入i進入編輯模式
  • 輸入*也就是重複的文字
  • 按下ESC返回到命令模式,返回以後vi就會把第二、3兩步的操做重複10

    提示:正常開發時,在進入編輯模式以前,不要按數字

練習2--利用可視塊給多行代碼增長註釋

  • 在開發中,可能會遇到一次性給多行代碼增長註釋的狀況

    Python中,要給代碼增長註釋,能夠在代碼前增長一個# 要實現這個效果能夠在命令模式

  • 移動到要添加註釋的第一行代碼^來到行首
  • CTRL+v進入可視塊模式
  • 使用j向下連續選中要添加的代碼行
  • 輸入I進入編輯模式,並在行首模式,注意:必定要是用I
  • 輸入#也就是註釋符號
  • 按下ESC返回到命令模式,返回以後vi會在以前選中的沒一行代碼插入#

7.5 分屏命令


  • 屬於vi的高級命令--能夠同時編輯和查看多個文件

7.5.1 末行命令拓展


末行命令主要針對文件進行操做的:保存、退出、保存&退出、搜索&替換、另存、新建、瀏覽文件

命令 英文 功能
:e . edit 會打開內置的文件瀏覽器,瀏覽器要當前目錄下的文件
:n 文件名 new 新建文件
:w 文件名 write 另存爲,可是仍然編輯當前文件,並不會切換文件

提示:切換文件以前,必須保證當前這個文件已經被保存!

  • 已經學習過的末行命令
命令 英文 功能
:w write 保存
:q quit 退出,若是沒有保存,不容許退出
:q! quit 強行退出,不保存退出
:wq write&quit 保存並退出
:x   保存並退出
:%s///gc   確認搜索並替換

7.5.2 分屏命令

  • 使用分屏命令,能夠同時編輯和查看多個文件
命令 英文 功能
:sp [文件名] split 橫向增長分屏
:vsp [文件名] vertical split 縱向增長分屏

1)切換分屏窗口

分屏窗口是基於CTRL+W這個快捷鍵的, W對應的英文單詞是window

命令 英文 功能
w window 切換窗口
r reverse 互換窗口
c close 關閉當前窗口,可是不能關閉最後一個窗口
q quit 退出當前窗口,若是是最後一個窗口,則關閉vi
o other 關閉其餘窗口
相關文章
相關標籤/搜索