Vim從理解到應用

1991 年,來自荷蘭的一名工程師 Bram Moolenaar 為了在他的Amiga計算機上復制Vi的功能,正式發布 了Vim的第一個版本。在當時無論誰也沒想到,這款軟件未來能在技術圈爆發出那么大的威力,為千千萬萬的工程師節省了無數時間,大幅提升他們的開發效率。

從Vi衍生出來的Vim有著不同于大多數編輯器的使用方式:通過鍵盤對多種模式的相互切換,進行各項命令的執行和對文本的編寫。這種方式使得Vim可以不用進行菜單或者鼠標操作,并且最小化組合鍵的操作。對文字錄入員或者程序員可以大大增強速度和效率。

接下來我們將開始對Vim的學習。

1、Vim模式介紹

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

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

  • 插入模式(Insert mode)(常用)
    在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯過程中一直保持這個模式。
    在插入模式中,可以按ESC鍵回到普通模式。

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

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

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

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

六種基本模式中以普通、插入和命令行三種模式最為常用,因為這三種模式的相互配合即可完成基本的編輯功能(普通模式:對文本進行復制、粘貼、刪除、撤銷等操作;插入模式:編寫文本內容;命令行模式:保存、退出文檔,以及設置編輯環境)。

vim啟動進入普通模式后,可通過按i鍵(插入)或a鍵(附加)進入插入模式,通過:鍵進入命令行模式。而當Vim處于插入模式或者命令行模式,均可以用過按Esc鍵或者Ctrl+[回到普通模式。
在這里插入圖片描述

2、Vim的進出與游標移動

2.1、Vim的打開

使用vim命令進入vim界面,命令格式如下

vim 文件名

默認條件下為當前路徑下的相應文件,如果文件不存在將新建文本后打開Vim。

2.2、游標移動與跳轉

在普通模式下,使用方向鍵或者反人類的h、j、k、l鍵可以移動游標,并通過w、b、e等鍵進行游標的跳轉,具體內容參見下表:

按鍵說明
nG(n Shift+g)游標移動到第n行(行間跳轉)
gg游標移動到第一行(行間跳轉)
G(Shift+g)游標移動到最后一行(行間跳轉)
b到前一個單詞的開頭
w到下一個單詞的開頭
e到當前單詞的結尾
ge到前一個單詞的結尾
0或^到行頭
$到行尾
f<字母>向后搜索<字母>并跳轉到第一個匹配的位置(很實用)
F<字母>向前搜索<字母>并跳轉到第一個匹配的位置(實用)
t<字母>向后搜索<字母>并跳轉到第一個匹配的位置之前的一個字母(不常用)
T<字母>向前搜索<字母>并跳轉到第一個匹配的位置之后的一個字母(不常用)

注:在命令行模式下,可通過輸入:set nu以顯示行號

2.3、Vim的退出與保存

2.3.1命令行模式下的退出
在命令行模式下,常用輸入wq回車,保存并退出編輯,下表為具體的退出方式:

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

2.3.3普通模式下的退出
普通模式下用戶可以使用Shift+zz進行保存并退出操作!

3、Vim的增刪改查、復制粘貼撤銷與快速縮進

不知道為什么,一提到增刪改查我就很激動。

3.1、增刪改查

3.1.1、增加(插入)操作
Vim很直接的擁有一個插入模式進行插入操作,下表為在普通模式下進入插入模式的具體方式(不包括通過替換方式進入插入模式的方法):

按鍵說明
i在當前光標處進行編輯
I在行首插入
a在光標后插入編輯
A在行末插入
o在當前行后插入一個新行
O在當前行前插入一個新行

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

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

3.1.3、修改(替換)操作
替換是針對普通模式下的操作,具體操作間下表:

命令說明
r+<待替換字母>將游標所在字母替換為指定字母
R連續替換,直到按下Esc
cc替換整行,即刪除游標所在行(將進入插入模式)
cw替換一個單詞,即刪除一個單詞(將進入插入模式)
C替換游標以后至行末
~反轉游標所在字母大小寫

3.1.4、查找操作
普通模式下輸入 / 然后鍵入需要查找的字符串 按回車后就會進行查找。 ? 與/ 功能相同,只不過 ? 是向上而 / 是向下查找。 進入查找之后,輸入n 和 N 可以繼續查找。 n是查找下一個內容,N查找上一個內容。
此外,普通模式下可以使用*(或g*)和#(或#)來向下和向上尋找游標所在處的單詞。

3.2、復制、粘貼、撤銷與快速縮進

3.2.1、復制粘貼與剪切粘貼
普通模式中使用y復制:

命令說明
yy復制游標所在的整行(5yy表示復制5行)
y^復制至行首,或y0。不含光標所在處字符
y$復制至行尾。含光標所在處字符
yw復制一個單詞
y2w復制兩個單詞
yG復制至文本末
y1G復制至文本開頭

普通模式下的使用p進行粘貼:

  • p(小寫)代表粘貼至光標后(下)
  • P(大寫)代表粘貼至光標前(上)

此外上文提到的dd刪除操作也是剪切,刪除后可以使用p進行粘貼的。

3.2.2、撤銷(Undo)操作

  • Vim使用u或者u{n}進行撤銷一次或者n次的操作;
  • 使用U(大寫) 撤銷當前行的所有修改;
  • 此外,Vim使用Ctrl+r進行Redo(復原)操作,進行對undo操作的插銷。

3.3.3、快速縮進與文本調整
以下是常用的縮進和文本調整方式:

命令說明
<<整行向左回退
>>整行將向右縮進(非常好用)
:set shiftwidth?命令行模式下,獲取縮進設定值
:set shiftwidth?=n命令行模式下,設定縮進值為n
:ce(center)使本行內容居中
:ri(right)使本行文本靠右
:le(left)使本行內容靠左

4、Vim的高級功能

高級功能剩下的內容有時間再更新吧。。。

5、總結

VIM 如果不是經常使用,很容易忘記它的使用技巧,需要經常復盤,久而久之也就養成了手指記憶。

為了更好的解決這個問題,讓各大開發者可以快速掌握 Vim 的常用快捷鍵,一位開發者做了一款游戲:Vim Adventures。在這個游戲中,你需要配合各種常用的 Vim 快捷鍵,來移動光標,與 NPC 進行對話,尋找線索,獲取鑰匙,打開寶箱。當你一次次通關后,便會慢慢發現自己已成功掌握大量 Vim 使用技巧。
PS:這個游戲只有前三關是免費的!!!

如果文章有表述不當的地方可以留言指正,互相學習 。

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

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

相關文章

如何用百度MIP快速搭建體驗友好的移動頁面

在讀這篇文章之前&#xff0c;請確定你已經了解 MIP 定義及加速原理。如果不確定的話&#xff0c;可以到 MIP 官網了解。 改造前期準備和注意事項: 你可以選擇直接將原先的移動站點直接改成 MIP 站&#xff0c;也可以單獨再做一套 MIP 站點與移動站并存。 復雜的頁面暫不建議…

JAVA知識基礎(一):數據類型

在我們學習一門編程語言時&#xff0c;最先要了解的就是數據類型&#xff0c;而數據類型又都是抽象的概念&#xff0c;初學者理解起來比較困難&#xff0c;所以我們往往是先應用再理解&#xff0c;但是在本篇文章我決定用先理解再應用的方式嘗試一下&#xff0c;試試效果。 1、…

百度MIP移動頁面加速——不只是CDN

MIP 是用 CDN 做加速的么&#xff1f;準確答案是&#xff1a;是&#xff0c;但不只是。 MIP 全稱 Mobile Instant Pages&#xff0c;移動網頁加速器&#xff0c;是百度提出的頁面加速解決方案。MIP 從前端渲染和頁面網絡傳輸兩方面進行優化&#xff0c;杜絕頁面渲染中的阻塞問…

JAVA知識基礎(二):基本語法

本篇主要介紹JAVA的運算符、循環結構以及條件結構。 1、JAVA運算符 計算機的最基本用途之一就是執行數學運算&#xff0c;作為一門計算機語言的Java也提供了一套豐富的運算符來操縱變量。 JAVA運算符可以大致概括為幾類&#xff1a;算術運算符、關系運算符、位運算符、邏輯運…

JAVA知識基礎(三):修飾符

JAVA中根據修飾對象的不同可以分為類修飾符、方法修飾符、變量修飾符三類&#xff0c;其中每種修飾符又可以單獨分成兩類&#xff1a;訪問修飾符和非訪問修飾符。為了便于理解&#xff0c;本文以訪問和非訪問的角度展開。 1、訪問修飾符 訪問修飾符有四個&#xff1a;public、…

百度推出新技術 MIP,網頁加載更快,廣告呢?

MIP 項目在 2016 年年初正式發布&#xff0c;幫助移動頁面加速&#xff08;原理&#xff09;。內測數據表明&#xff0c;MIP 頁面在 1s 內加載完成。現在已經有十多家網站加入 MIP 項目&#xff0c;有更多的網站正在加入中。在MIP收到的反饋中&#xff0c;大部分都提到了廣告的…

JAVA知識基礎(四):深入理解static關鍵字

1、static存在的主要意義 static的主要意義是在于創建獨立于具體對象的域變量或者方法。以致于即使沒有創建對象&#xff0c;也能使用屬性和調用方法&#xff01; static關鍵字還有一個比較關鍵的作用就是 用來形成靜態代碼塊以優化程序性能。static塊可以置于類中的任何地方…

MIP改造常見問題二十問

在MIP推出后&#xff0c;我們收到了很多站長的疑問和顧慮。我們將所有疑問和顧慮歸納為以下二十個問題&#xff0c;希望對大家理解 MIP 有幫助。 1、MIP 化后對其他搜索引擎抓取收錄以及 SEO 的影響如何&#xff1f; 答&#xff1a;在原頁面 MIP 化&#xff0c;不會影響其它搜…

Nginx(零):背景

我們今天開始對Nginx的學習&#xff0c;本來是打算第一篇就是基礎知識介紹的&#xff0c;但是我感覺在學習一個新知識之前總應該知道&#xff0c;我們為什么要學習它&#xff0c;學習它的意義何在吧&#xff01;所以我加了背景這一篇作為Nginx開始學習的標志。 1、Nginx的誕生…

Nginx(一):概念基礎

上一篇我們介紹了Nginx的背景&#xff0c;現在我們就要開始正式對Nginx的學習了。本篇我們將對Nginx的基本定義進行介紹&#xff0c;了解Nginx到底是什么。然后我們會介紹Nginx最基本的三個概念&#xff1a;反向代理、負載均衡、動靜分離。 1、Nginx是什么 Nginx(“engine x”…

MIP 官方發布 v1穩定版本

近期&#xff0c;MIP 官方發布了 MIP 系列文件的全新 v1 版本&#xff0c;建議開發者盡快完成升級。 一、 我是開發者&#xff0c;如何升級版本&#xff1f; 對于 MIP 頁面開發者來說&#xff0c;* 只需替換線上引用的 MIP 文件為 v1 版本 *&#xff0c;就可以完成升級。所有…

百度MIP頁規范詳解 —— canonical標簽

百度 MIP 的規范要求必須添加強制性標簽 canonical&#xff0c;不然 MIP 校驗工具 會報錯&#xff1a; 強制性標簽 <link rel"/^(canonical)$/"> 缺失或錯誤 這個標簽怎么寫&#xff1f;又是干什么用的呢&#xff1f; ** 簡單來說&#xff0c;canonical 標簽…

Nginx(二):安裝、配置、常用命令

1、Nginx在Linux操作系統中的安裝 這里簡單介紹一下nginx的安裝了 1.1、前期準備 在安裝nginx之前我們要提前準擺好它的編譯工具以及庫文件&#xff1a;zlib、poenssl。 還有有讓Nginx支持Rewrite功能的PCRE. 安裝的途徑有很多可以參考&#xff1a;https://www.runoob.com/lin…

JAVA知識基礎(五):深入理解final關鍵字

1.final 關鍵字 final關鍵字主要用在三個地方&#xff1a;變量、方法、類。 final修飾變量&#xff1a;final修飾一個類時&#xff0c;表明這個類不能被繼承。final修飾方法&#xff1a;final修飾方法&#xff0c;方法不可以重寫&#xff0c;但是可以被子類訪問 【前提&#…

CMS模板應用調研問卷

截止目前&#xff0c;已經有數十家網站與我們合作&#xff0c;進行了MIP化改造&#xff0c;在搜索結果頁也能看到“閃電標”的出現。除了改造方面的問題&#xff0c;MIP項目組被問到最多的就是&#xff1a;我用了wordpress&#xff0c;我用了織夢cms&#xff0c;怎么改MIP呢&am…

Nginx(三):反向代理

我們本篇將通過兩個實例進行對Nginx反向代理的學習。 1、概念基礎 反向代理&#xff0c;其實客戶端對代理是無感知的&#xff0c;因為客戶端不需要任何配置就是可以訪問。我們只需要將請求發送到反向代理服務器上&#xff0c;有反向代理服務器去選擇目標服務器獲取數據后&…

VIP站長大會(北京站)常見問題解答

功能支持問題 1. react 能否和 MIP 結合使用&#xff0c;如果暫時不能以后是否有考慮&#xff1f;是否會和其他 JavaScript 框架 (比如 Angular ) 結合 ? 目前暫無計劃支持。 2. MIP 頁是否支持自定義 cookie? 實現 登錄、統計、廣告等功能 ? <mip-cookie>組件正在…

Nginx(四):負載均衡Load balancing

1、概念基礎 Load balancing&#xff0c;即負載均衡&#xff0c;是一種計算機技術&#xff0c;用來在多個計算機&#xff08;計算機集群&#xff09;、網絡連接、CPU、磁盤驅動器或其他資源中分配負載&#xff0c;以達到最優化資源使用、最大化吞吐率、最小化響應時間、同時避…

JAVA知識基礎(六):抽象

1.概述 抽象類、抽象方法以及接口&#xff0c;這三個知識點是每個程序員必備的基礎&#xff0c;無論是在實際編程的時候&#xff0c;還是在面試的時候&#xff0c;都會出現這類問題&#xff0c;面試官很可能就會問你&#xff0c;interface和abstract的區別 當父類知道子類應該…

MIP開發教程(三) 使用MIP-CLI工具調試組件

一 . 在 mip-extensions 倉庫中創建新的組件二 . 預覽調試組件 三 . 在 MIP 頁中引用自己編寫的 MIP 組件 四 . 組件提交到 GitHub 倉庫時需要進行校驗 站長開發的非通用組件&#xff0c;使用 組件上線平臺 提交&#xff0c;上線后代碼位于 GitHub/mip-extension-platform 倉…