Vim的6種基本模式及基本操作

来源:http://www.cnblogs.com/shiyanlou/archive/2017/09/05/7478346.html
-Advertisement-
Play Games

說明:文章所有內容截選自實驗樓教程 "【Vim編輯器】" ~ Vim 快速入門 一、實驗介紹 1.1 實驗內容 本次實驗將學習vim中的不同模式和一些基本操作。 1.2 實驗知識點 + Vim中的六種基本模式 + Vim中的基本操作 1.3 課程來源 "VIM 線上手冊" 二、實驗步驟 2.1 vi ...


說明:文章所有內容截選自實驗樓教程【Vim編輯器】~

Vim 快速入門

一、實驗介紹

1.1 實驗內容

本次實驗將學習vim中的不同模式和一些基本操作。

1.2 實驗知識點

  • Vim中的六種基本模式
  • Vim中的基本操作

1.3 課程來源

VIM 線上手冊

二、實驗步驟

2.1 vim模式介紹

以下介紹內容來自維基百科Vim

從vi演生出來的Vim具有多種模式,這種獨特的設計容易使初學者產生混淆。幾乎所有的編輯器都會有插入和執行命令兩種模式,並且大多數的編輯器使用了與Vim截然不同的方式:命令目錄(滑鼠或者鍵盤驅動),組合鍵(通常通過control鍵(CTRL)和alt鍵(ALT)組成)或者滑鼠輸入。Vim和vi一樣,僅僅通過鍵盤來在這些模式之中切換。這就使得Vim可以不用進行菜單或者滑鼠操作,並且最小化組合鍵的操作。對文字錄入員或者程式員可以大大增強速度和效率。

Vim具有6種基本模式和5種派生模式,我們這裡只簡單介紹下6種基本模式:

  • 普通模式(Normal mode)

在普通模式中,用的編輯器命令,比如移動游標,刪除文本等等。這也是Vim啟動後的預設模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器預設模式為插入模式)。

Vim強大的編輯能來自於其普通模式命令。普通模式命令往往需要一個操作符結尾。例如普通模式命令dd刪除當前行,但是第一個"d"的後面可以跟另外的移動命令來代替第二個d,比如用移動到下一行的"j"鍵就可以刪除當前行和下一行。另外還可以指定命令重覆次數,2dd(重覆dd兩次),和dj的效果是一樣的。用戶學習了各種各樣的文本間移動/跳轉的命令和其他的普通模式的編輯命令,並且能夠靈活組合使用的話,能夠比那些沒有模式的編輯器更加高效的進行文本編輯。

在普通模式中,有很多方法可以進入插入模式。比較普通的方式是按a(append/追加)鍵或者i(insert/插入)鍵。

  • 插入模式(Insert mode)

在這個模式中,大多數按鍵都會向文本緩衝中插入文本。大多數新用戶希望文本編輯器編輯過程中一直保持這個模式。

在插入模式中,可以按ESC鍵回到普通模式。

  • 可視模式(Visual mode)

這個模式與普通模式比較相似。但是移動命令會擴大高亮的文本區域。高亮區域可以是字元、行或者是一塊文本。當執行一個非移動命令時,命令會被執行到這塊高亮的區域上。Vim的"文本對象"也能和移動命令一樣用在這個模式中。

  • 選擇模式(Select mode)

這個模式和無模式編輯器的行為比較相似(Windows標準文本控制項的方式)。這個模式中,可以用滑鼠或者游標鍵高亮選擇文本,不過輸入任何字元的話,Vim會用這個字元替換選擇的高亮文本塊,並且自動進入插入模式。

  • 命令行模式(Command line mode)

在命令行模式中可以輸入會被解釋成並執行的文本。例如執行命令(:鍵),搜索(/?鍵)或者過濾命令(!鍵)。在命令執行之後,Vim返回到命令行模式之前的模式,通常是普通模式。

  • Ex模式(Ex mode)

這和命令行模式比較相似,在使用:visual命令離開Ex模式前,可以一次執行多條命令。

這其中我們常用到就是普通模式、插入模式和命令行模式,本課程也只涉及這三個常用模式的內容

2.2 三種常用模式的切換

vim啟動進入普通模式,處於插入模式或命令行模式時只需要按Esc或者Ctrl+[(這在vim課程環境中不管用)即可進入普通模式。普通模式中按i(插入)或a(附加)鍵都可以進入插入模式,普通模式中按:進入命令行模式。命令行模式中輸入wq回車後保存並退出vim。

2.3 進入vim

2.3.1 使用vim命令進入vim界面

vim後面加上你要打開的已存在的文件名或者不存在(則作為新建文件)的文件名。
打開Xfce終端,輸入以下命令

$ vim practice_1.txt

直接使用vim也可以打開vim編輯器,但是不會打開任何文件。

$ vim

進入命令行模式後輸入:e 文件路徑 同樣可以打開相應文件。

2.3.2 游標移動

在進入vim後,按下i鍵進入插入模式。在該模式下您可以輸入文本信息,下麵請輸入如下三行信息:

12345678
abcdefghijk
shiyanlou.com

Esc進入普通模式,在該模式下使用方向鍵或者h,j,k,l鍵可以移動游標。

按鍵 說明
h
l 右(小寫L)
j
k
w 移動到下一個單詞
b 移動到上一個單詞

請嘗試在普通模式下使用方向鍵移動游標到shiyanlou這幾個字母上面。

2.4 進入插入模式

2.4.1進入插入模式

在普通模式下使用下麵的鍵將進入插入模式,並可以從相應的位置開始輸入

命令 說明
i 在當前游標處進行編輯
I 在行首插入
A 在行末插入
a 在游標後插入編輯
o 在當前行後插入一個新行
O 在當前行前插入一個新行
cw 替換從游標所在位置後到一個單詞結尾的字元

請嘗試不同的從普通模式進入插入模式的方法,在最後一行shiyanlou前面加上www.註意每次要先回到普通模式才能切換成以不同的方式進入插入模式

2.5 保存文檔

2.5.1 命令行模式下保存文檔

從普通模式輸入:進入命令行模式,輸入w回車,保存文檔。輸入:w 文件名可以將文檔另存為其他文件名或存到其它路徑下

2.6 退出vim

2.6.1 命令行模式下退出vim

從普通模式輸入:進入命令行模式,輸入wq回車,保存並退出編輯

以下為其它幾種退出方式:

命令 說明
:q! 強制退出,不保存
:q 退出
:wq! 強制保存並退出
:w <文件路徑> 另存為
:saveas 文件路徑 另存為
:x 保存並退出
:wq 保存並退出

2.6.2 普通模式下退出vim

普通模式下輸入Shift+zz即可保存退出vim

2.7 刪除文本

2.7.1 普通模式下刪除vim文本信息

進入普通模式,使用下列命令可以進行文本快速刪除:

命令 說明
x 刪除游標所在的字元
X 刪除游標所在前一個字元
Delete x
dd 刪除整行
dw 刪除一個單詞(不適用中文)
d$D 刪除至行尾
d^ 刪除至行首
dG 刪除到文檔結尾處
d1G 刪至文檔首部

除此之外,你還可以在命令之前加上數字,表示一次刪除多行,如:

2dd表示一次刪除2行

我們來做如下練習:

$ cp /etc/protocols .
$ vim protocols

三、實驗總結

vim初體驗你是不是覺得很奇妙呢,或許目前你還沒有vim產生任何好感,不覺得它是一款優秀的編輯器,那隻能是因為你還沒能掌握vim的精髓,或者是**你打字太慢,回去在小霸王學習機上再練練吧-_-||**。

這裡也可以先透露下,vim的精髓就在於命令鍵的組合,全鍵盤的操作,可以使你手不離開鍵盤輸入區域即可完成所有的操作,那可真是即高效又炫酷的體驗啊,當你掌握這項技能絕對可以秒掉其它不會用vim的程式員幾條街(起碼在氣勢上吧,當然還要除掉哪些只會Emacs的程式員,因為Emacs與Vim之間有場戰爭,感興趣的可以看這裡Emacs和Vim:神的編輯器和編輯器之神)

最後:

實驗樓教程【Vim編輯器】總共4節,文章屬於第一節內容,剩下3節內容為:

  • Vim文檔編輯
  • Vim文檔編輯
  • 高級功能入門

如果你想深入掌握並應用Vim,可以進入實驗樓哦,因為實驗樓的線上開發環境里有Vim編輯器,可以在學習中就實戰應用Vim~

image.png


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 該文章轉載於此:http://blog.csdn.net/u010780613/article/details/51491237 問題描述: 在使用Ubuntu系統的時候,遇到這樣的一個問題:我使用普通用戶登錄系統,然後執行sudo echo "This is testPage." >/usr/lo ...
  • 原因: 當我們通過request獲取客戶端IP時,自身伺服器通常會為了保護信息或者負載均衡的目的,對自身伺服器做反向代理。此時如果我們通過request.getRemoteAddr();可能獲取到的是自身代理伺服器的IP,而無法達到獲取用戶請求ip的目的。 解決辦法: 以下整理了各個代理伺服器自己開 ...
  • 原文發表於cu:2016-06-14 Zabbix觸發器(trigger)達到閥值後會有動作(action)執行:發送告警信息或執行遠程命令。 本文主要配置驗證zabbix執行遠程命令。 一.環境 Server:基於CentOS-7-x86_64-1511; Zabbix:zabbix-3.0.1s ...
  • 伺服器說明 外網 IP(NAT) 內網 IP(NAT) 主機名apache web 伺服器 10.0.0.7/24 172.16.1.7/24 web02nginx web 伺服器 10.0.0.8/24 172.16.1.8/24 web01NFS 存儲伺服器 10.0.0.31/24 172.1 ...
  • 編輯 ...
  • 綠色文件 可執行文件,可執行的程式 紅色文件 壓縮文件或者包文件 藍色文件 目錄 www.2cto.com 白色文件 一般性文件,如文本文件,配置文件,源碼文件等 淺藍色文件 鏈接文件,主要是使用ln命令建立的文件 ...
  • 作為一個運維 不是你懂多少知識才是你的價值 你有幸能遇到多少錯誤才是你的最大的價值 知識 你有我有大家有 錯誤我有你沒有 這便是我的價值 我遇到一個錯誤 蠻難遇到的一個錯誤 所以想分享給大家 下麵我在模擬機演示給大家 用 root許可權 避免你們說是因為許可權的錯誤 2017年9月5日 我在切換sftp ...
  • 1 什麼是TLS 原理在網上資料很多,這裡不展開。 簡單點說,動態申請的每線程變數。有一類比較熟悉的每線程變數是一個帶__thread的每線程變數,兩者的區別在於,TLS這類每線程變數是動態申請的。有以下一系列介面: #include <pthread.h> int pthread_key_crea ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...