vim簡單命令教程-firstblood

你想以最快的速度學習人類史上最好的文本編輯器VIM嗎?你先得懂得如何在VIM幸存下來,然后一點一點地學習各種戲法。

Vim?the Six Billion Dollar editor

Better, Stronger, Faster.

學習?vim?并且其會成為你最后一個使用的文本編輯器。沒有比這個更好的文本編輯器了,非常地難學,但是卻不可思議地好用。

我建議下面這四個步驟:

  1. 存活
  2. 感覺良好
  3. 覺得更好,更強,更快
  4. 使用VIM的超能力

當你走完這篇文章,你會成為一個vim的 superstar。

在開始學習以前,我需要給你一些警告:

  • 學習vim在開始時是痛苦的。
  • 需要時間
  • 需要不斷地練習,就像你學習一個樂器一樣。
  • 不要期望你能在3天內把vim練得比別的編輯器更有效率。
  • 事實上,你需要2周時間的苦練,而不是3天。

第一級 – 存活

  1. 安裝?vim
  2. 啟動 vim
  3. 什么也別干!請先閱讀

當你安裝好一個編輯器后,你一定會想在其中輸入點什么東西,然后看看這個編輯器是什么樣子。但vim不是這樣的,請按照下面的命令操作:

  • 啟 動Vim后,vim在?Normal?模式下。
  • 讓我們進入?Insert?模式,請按下鍵 i 。(陳皓注:你會看到vim左下角有一個–insert–字樣,表示,你可以以插入的方式輸入了)
  • 此時,你可以輸入文本了,就像你用“記事本”一樣。
  • 如果你想返回?Normal?模式,請按?ESC?鍵。

現在,你知道如何在?Insert?和?Normal?模式下切換了。下面是一些命令,可以讓你在?Normal?模式下幸存下來:

  • i?→?Insert?模式,按?ESC?回到?Normal?模式.
  • x?→ 刪當前光標所在的一個字符。
  • :wq?→ 存盤 + 退出 (:w?存盤,?:q?退出) ? (陳皓注::w 后可以跟文件名)
  • dd?→ 刪除當前行,并把刪除的行存到剪貼板里
  • p?→ 粘貼剪貼板

推薦:

  • hjkl?(強例推薦使用其移動光標,但不必需) →你也可以使用光標鍵 (←↓↑→). 注:?j?就像下箭頭。
  • :help <command>?→ 顯示相關命令的幫助。你也可以就輸入?:help?而不跟命令。(陳皓注:退出幫助需要輸入:q)

你能在vim幸存下來只需要上述的那5個命令,你就可以編輯文本了,你一定要把這些命令練成一種下意識的狀態。于是你就可以開始進階到第二級了。

當是,在你進入第二級時,需要再說一下?Normal?模式。在一般的編輯器下,當你需要copy一段文字的時候,你需要使用?Ctrl?鍵,比如:Ctrl-C。也就是說,Ctrl鍵就好像功能鍵一樣,當你按下了功能鍵Ctrl后,C就不在是C了,而且就是一個命令或是一個快鍵鍵了,在VIM的Normal模式下,所有的鍵就是功能鍵了。這個你需要知道。

標記:

  • 下面的文字中,如果是?Ctrl-λ我會寫成?<C-λ>.
  • 以?:?開始的命令你需要輸入?<enter>回車,例如 — 如果我寫成?:q?也就是說你要輸入?:q<enter>.

第二級 – 感覺良好

上面的那些命令只能讓你存活下來,現在是時候學習一些更多的命令了,下面是我的建議:(陳皓注:所有的命令都需要在Normal模式下使用,如果你不知道現在在什么樣的模式,你就狂按幾次ESC鍵)

  1. 各種插入模式
    • a?→ 在光標后插入
    • o?→ 在當前行后插入一個新行
    • O?→ 在當前行前插入一個新行
    • cw?→ 替換從光標所在位置后到一個單詞結尾的字符
  2. 簡單的移動光標
    • 0?→ 數字零,到行頭
    • ^?→ 到本行第一個不是blank字符的位置(所謂blank字符就是空格,tab,換行,回車等)
    • $?→ 到本行行尾
    • g_?→ 到本行最后一個不是blank字符的位置。
    • /pattern?→ 搜索?pattern?的字符串(陳皓注:如果搜索出多個匹配,可按n鍵到下一個)
  3. 拷貝/粘貼?(陳皓注:p/P都可以,p是表示在當前位置之后,P表示在當前位置之前)
    • P?→ 粘貼
    • yy?→ 拷貝當前行當行于?ddP
  4. Undo/Redo
    • u?→ undo
    • <C-r>?→ redo
  5. 打開/保存/退出/改變文件(Buffer)
    • :e <path/to/file>?→ 打開一個文件
    • :w?→ 存盤
    • :saveas <path/to/file>?→ 另存為?<path/to/file>
    • :x,?ZZ?或?:wq?→ 保存并退出 (:x?表示僅在需要時保存,ZZ不需要輸入冒號并回車)
    • :q!?→ 退出不保存?:qa!?強行退出所有的正在編輯的文件,就算別的文件有更改。
    • :bn?和?:bp?→ 你可以同時打開很多文件,使用這兩個命令來切換下一個或上一個文件。(陳皓注:我喜歡使用:n到下一個文件)

花點時間熟悉一下上面的命令,一旦你掌握他們了,你就幾乎可以干其它編輯器都能干的事了。但是到現在為止,你還是覺得使用vim還是有點笨拙,不過沒關系,你可以進階到第三級了。

第三級?– 更好,更強,更快

先恭喜你!你干的很不錯。我們可以開始一些更為有趣的事了。在第三級,我們只談那些和vi可以兼容的命令。

更好

下面,讓我們看一下vim是怎么重復自己的:

  1. .?→ (小數點) 可以重復上一次的命令
  2. N<command> → 重復某個命令N次

下面是一個示例,找開一個文件你可以試試下面的命令:

  • 2dd?→ 刪除2行
  • 3p?→ 粘貼文本3次
  • 100idesu [ESC]?→ 會寫下 “desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu “
  • .?→ 重復上一個命令—— 100 “desu “.
  • 3.?→ 重復 3 次 “desu” (注意:不是 300,你看,VIM多聰明啊).
更強

你要讓你的光標移動更有效率,你一定要了解下面的這些命令,千萬別跳過

  1. NG?→ 到第 N 行 (陳皓注:注意命令中的G是大寫的,另我一般使用 : N 到第N行,如 :137 到第137行)
  2. gg?→ 到第一行。(陳皓注:相當于1G,或 :1)
  3. G?→ 到最后一行。
  4. 按單詞移動:
    1. w?→ 到下一個單詞的開頭。
    2. e?→ 到下一個單詞的結尾。

    > 如果你認為單詞是由默認方式,那么就用小寫的e和w。默認上來說,一個單詞由字母,數字和下劃線組成(陳皓注:程序變量)

    > 如果你認為單詞是由blank字符分隔符,那么你需要使用大寫的E和W。(陳皓注:程序語句)

    Word moves example

下面,讓我來說說最強的光標移動:

  • %?: 匹配括號移動,包括?(,?{,?[. (陳皓注:你需要把光標先移到括號上)
  • *?和?#: ?匹配光標當前所在的單詞,移動光標到下一個(或上一個)匹配單詞(*是下一個,#是上一個)

相信我,上面這三個命令對程序員來說是相當強大的。

更快

你一定要記住光標的移動,因為很多命令都可以和這些移動光標的命令連動。很多命令都可以如下來干:

<start position><command><end position>

例如?0y$?命令意味著:

  • 0?→ 先到行頭
  • y?→ 從這里開始拷貝
  • $?→ 拷貝到本行最后一個字符

你可可以輸入?ye,從當前位置拷貝到本單詞的最后一個字符。

你也可以輸入?y2/foo?來拷貝2個 “foo” 之間的字符串。

還有很多時間并不一定你就一定要按y才會拷貝,下面的命令也會被拷貝:

  • d?(刪除 )
  • v?(可視化的選擇)
  • gU?(變大寫)
  • gu?(變小寫)
  • 等等
(陳皓注:可視化選擇是一個很有意思的命令,你可以先按v,然后移動光標,你就會看到文本被選擇,然后,你可能d,也可y,也可以變大寫等)

第四級 – Vim 超能力

你只需要掌握前面的命令,你就可以很舒服的使用VIM了。但是,現在,我們向你介紹的是VIM殺手級的功能。下面這些功能是我只用vim的原因。

在當前行上移動光標:?0?^?$?f?F?t?T?,?;
  • 0?→ 到行頭
  • ^?→ 到本行的第一個非blank字符
  • $?→ 到行尾
  • g_?→ 到本行最后一個不是blank字符的位置。
  • fa?→ 到下一個為a的字符處,你也可以fs到下一個為s的字符。
  • t,?→ 到逗號前的第一個字符。逗號可以變成其它字符。
  • 3fa?→ 在當前行查找第三個出現的a。
  • F?和?T?→ 和?f?和?t?一樣,只不過是相反方向。
    Line moves

還有一個很有用的命令是?dt"?→ 刪除所有的內容,直到遇到雙引號——?"。

區域選擇?<action>a<object>?或?<action>i<object>

在visual 模式下,這些命令很強大,其命令格式為

<action>a<object>?和?<action>i<object>

  • action可以是任何的命令,如?d?(刪除),?y?(拷貝),?v?(可以視模式選擇)。
  • object 可能是:?w?一個單詞,?W?一個以空格為分隔的單詞,?s?一個句字,?p?一個段落。也可以是一個特別的字符:"、?'、?)、?}、?]。

假設你有一個字符串?(map (+) ("foo")).而光標鍵在第一個?o?的位置。

  • vi"?→ 會選擇?foo.
  • va"?→ 會選擇?"foo".
  • vi)?→ 會選擇?"foo".
  • va)?→ 會選擇("foo").
  • v2i)?→ 會選擇?map (+) ("foo")
  • v2a)?→ 會選擇?(map (+) ("foo"))

Text objects selection

塊操作:?<C-v>

塊操作,典型的操作:?0 <C-v> <C-d> I-- [ESC]

  • ^?→ 到行頭
  • <C-v>?→ 開始塊操作
  • <C-d>?→ 向下移動 (你也可以使用hjkl來移動光標,或是使用%,或是別的)
  • I-- [ESC]?→ I是插入,插入“--”,按ESC鍵來為每一行生效。

Rectangular blocks

在Windows下的vim,你需要使用?<C-q>?而不是?<C-v>?,<C-v>?是拷貝剪貼板。

自動提示:?<C-n>?和?<C-p>

在 Insert 模式下,你可以輸入一個詞的開頭,然后按?<C-p>或是<C-n>,自動補齊功能就出現了……

Completion

宏錄制:?qa?操作序列?q,?@a,?@@
  • qa?把你的操作記錄在寄存器?a。
  • 于是?@a?會replay被錄制的宏。
  • @@?是一個快捷鍵用來replay最新錄制的宏。

示例

在一個只有一行且這一行只有“1”的文本中,鍵入如下命令:

  • qaYp<C-a>q
    • qa?開始錄制
    • Yp?復制行.
    • <C-a>?增加1.
    • q?停止錄制.
  • @a?→ 在1下面寫下 2
  • @@?→ 在2 正面寫下3
  • 現在做?100@@?會創建新的100行,并把數據增加到 103.

Macros

可視化選擇:?v,V,<C-v>

前面,我們看到了?<C-v>的示例 (在Windows下應該是<C-q>),我們可以使用?v?和?V。一但被選好了,你可以做下面的事:

  • J?→ 把所有的行連接起來(變成一行)
  • <?或?>?→ 左右縮進
  • =?→ 自動給縮進 (陳皓注:這個功能相當強大,我太喜歡了)

Autoindent

在所有被選擇的行后加上點東西:

  • <C-v>
  • 選中相關的行 (可使用?j?或?<C-d>?或是?/pattern?或是?%?等……)
  • $?到行最后
  • A, 輸入字符串,按?ESC。

Append to many lines

分屏:?:split?和?vsplit.

下面是主要的命令,你可以使用VIM的幫助?:help split. 你可以參考本站以前的一篇文章VIM分屏。

  • :split?→ 創建分屏 (:vsplit創建垂直分屏)
  • <C-w><dir>?: dir就是方向,可以是?hjkl?或是 ←↓↑→ 中的一個,其用來切換分屏。
  • <C-w>_?(或?<C-w>|)?: 最大化尺寸 (<C-w>|?垂直分屏)
  • <C-w>+?(或?<C-w>-)?: 增加尺寸

Split

結束語

  • 上面是作者最常用的90%的命令。
  • 我建議你每天都學1到2個新的命令。
  • 在兩到三周后,你會感到vim的強大的。
  • 有時候,學習VIM就像是在死背一些東西。
  • 幸運的是,vim有很多很不錯的工具和優秀的文檔。
  • 運行vimtutor直到你熟悉了那些基本命令。
  • 其在線幫助文檔中你應該要仔細閱讀的是?:help usr_02.txt.
  • 你會學習到諸如??!,?目錄,寄存器,插件等很多其它的功能。

學習vim就像學彈鋼琴一樣,一旦學會,受益無窮。

——————————正文結束——————————

對于vi/vim只是點評一點:這是一個你不需要使用鼠標,不需使用小鍵盤,只需要使用大鍵盤就可以完成很多復雜功能文本編輯的編輯器。不然,Visual Studio也不就會有vim的插件了。

(全文完)

轉載于:https://www.cnblogs.com/wangjian8888/p/5898465.html

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

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

相關文章

第三課、Qt的誕生和本質------------------狄泰軟件學院

一、GUI用戶界面元素 &#xff08;1&#xff09;、GUI應用程序是由固定的窗口元素所構成 &#xff08;2&#xff09;、操作系統提供了創建用戶界面元素所需要的函數 &#xff08;3&#xff09;、各自功能不同的函數依次調用&#xff0c;從而創建出界面元素 &#xff08;4&#…

java mapstring_ object 遍歷_ListMapString,Object使用Java代碼遍歷以獲取String,Object的值...

List>的結果集怎么使用Java代碼遍歷以獲取String&#xff0c;Object的值&#xff1f;package excel;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class List1{public static void main(String[] args){Map map…

Linux tar命令高級用法——備份數據

Linux tar命令高級用法——備份數據 2015-12-31 Linux學習Linux上有功能強大的tar命令&#xff0c;tar最初是為了制作磁帶備份&#xff08;tape archive&#xff09;而設計的&#xff0c;它的作用是把文件和目錄備份到磁帶中&#xff0c;然后從磁帶中提取或恢復文件。現在我們可…

iOS uiviewcontroller 添加另外一個controller的View

需要 添加 [self addChildViewController:vc]; [_mainScrollView addSubview:vc.view];轉載于:https://www.cnblogs.com/foolish-guo/p/6385288.html

mysql 即學a又學b_MySQL學習第一天

一、 數據庫:*學習重點:創建數據庫/向表添加記錄/查詢記錄數據庫概念:文件系統(存儲和管理)數據庫軟件介紹:Oracle/MySQL/SQL server…分類:關系型數據庫:關系模型組織數據非關系型數據庫:鍵值對關系存儲二、 mysql數據的存儲方式:一臺數據庫服務器中會創建很多個數據庫(一個項…

Intellij IDEA 快捷鍵(Mac)

編輯 格式化代碼 AltCommandL 大小寫切換 ShiftCommandU 包圍 AltCommandT 選中代碼抽取方法 AltCommandM 調試/運行查看 類關系視圖 CommandAltU 查看所有的 TODO Command6 查詢方法調用處 AltF7 搜索其它 隱藏 Intellij IDEA CommandH 自動提醒 Alt/(這是我自己設置的)…

Spark RDD算子介紹

Spark學習筆記總結 01. Spark基礎 1. 介紹 Spark可以用于批處理、交互式查詢&#xff08;Spark SQL&#xff09;、實時流處理&#xff08;Spark Streaming&#xff09;、機器學習&#xff08;Spark MLlib&#xff09;和圖計算&#xff08;GraphX&#xff09;。 Spark是MapReduc…

java 寫tb級文件_三管齊下!TB 級文件的上傳性能瞬間被優化 100 倍!

作者 | 中華石杉責編 | 伍杏玲本文經授權轉載石杉的架構筆記(ID&#xff1a;shishan100)這篇文章我們來看看&#xff0c;世界上最優秀的分布式文件系統HDFS&#xff0c;是如何對超大文件的上傳做性能優化的&#xff1f;首先&#xff0c;我們還是通過一張圖來看一下文件上傳的大…

CentOS7下安裝Redis — 單節點

2019獨角獸企業重金招聘Python工程師標準>>> 1. 環境準備 安裝編譯所需要的包&#xff1a; yum install gcc tcl 2. 下載redis http://download.redis.io/releases/redis-3.2.7.tar.gz 3. 安裝redis ## 創建redis的安裝目錄 mkdir /usr/local/redis## 解壓redis tar…

筆記本中美化代碼的方法

這里向大家推薦一個很好用的記筆記軟件,微軟的OneNote,這個筆記軟件,支持分區和分區組的創建,而且入門簡單,界面簡潔,很適合從word過渡過來的人來記筆記! 不過如果直接記筆記,對于程序員來說,可能希望代碼在筆記本上更好看一些,那么應該怎么辦呢?下面提供了在OneNote中,讓代碼…

工具使用——印象(匯總)

作者&#xff1a;桂。 時間&#xff1a;2017-02-09 23:11:30 鏈接&#xff1a;http://www.cnblogs.com/xingshansi/articles/6384097.html 說明&#xff1a;轉載請注明出處&#xff0c;謝謝。 前言 本文僅僅介紹印象筆記的使用&#xff0c;至于挖掘機哪家強&#xff0c;本文不…

java final修飾屬性_Java final關鍵字用來修飾類、方法、屬性

1.final修飾類&#xff1a;這個類不能被繼承。如&#xff1a;String類、StringBuffer類、System類。2.final修飾方法&#xff1a;不能被重寫。如&#xff1a;Object類的getClass()方法。3.final修飾屬性&#xff1a;此屬性就是一個常量&#xff0c;一旦初始化就不可再被賦值。習…

SQL SERVER 數據導出JSON

執行下面的存儲過程&#xff1a; SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE[dbo].[SerializeJSON](ParameterSQL AS VARCHAR(MAX))ASBEGINDECLARE SQL NVARCHAR(MAX)DECLARE XMLString VARCHAR(MAX)DECLARE XML XMLDECLARE Paramlist NVARCHAR(1000)SET …

JSP+Javabean+Servlet實現用戶注冊

在entity包下新建javabean 也就是實體類User 注意id用 Integer 而不用 int&#xff0c; 因為 int 自動初始化為0 public class User { private Integer id; private String username; private String password; 后面是set和get方法... 在Servlet包下創建servlet 右擊Servlet…

main的方法是Java_Java中的main()方法

在Java中&#xff0c;main()方法是Java應用程序的入口方法&#xff0c;也就是說&#xff0c;程序在運行的時候&#xff0c;第一個執行的方法就是main()方法&#xff0c;這個方法和其他的方法有很大的不同&#xff0c;比如方法的名字必須是main&#xff0c;方法必須是public sta…

深入理解Python的logging模塊:從基礎到高級

在Python編程中&#xff0c;日志記錄是一種重要的調試和錯誤追蹤工具。Python的logging模塊提供了一種靈活的框架&#xff0c;用于發出日志消息&#xff0c;這些消息可以被發送到各種輸出源&#xff0c;如控制臺、文件、HTTP GET/POST位置等。本文將深入探討Python的logging模塊…

http請求連接

1、在Info.plist中添加NSAppTransportSecurity類型Dictionary。2、在NSAppTransportSecurity下添加NSAllowsArbitraryLoads類型Boolean,值設為YES轉載于:https://www.cnblogs.com/liuting-1204/p/5919233.html

數據庫不完全恢復 以及恢復到測試環境:

sample 1: 1.清空歸檔日志 RMAN> crosscheck archivelog all; RMAN> delete achivelog all; 2.清空數據文件。 select name from v$datafile; rm v$datafile 3.恢復數據 ##check file date: ##把db數據恢復到&#xff1a;2017-02-05 00:00:00 ls -lt /ngenprdblog/ ls…

centos7安裝java6_CentOS7.6安裝jdk1.8

2、登錄Linux服務器&#xff0c;通過rz命令將jdk導入服務器如果沒有rz命令 需要先安裝lrzszyum install lrzsz -y3、將jdk壓縮包解壓到指定路徑 -C 指定路徑4、配置環境變量編輯/etc/profile文件 在末尾加上以下內容 wq保存退出source /etc/profile文件 使配置文件生效export J…

ubuntu安裝wkhtmltopdf

下載安裝wkhtmltox系統環境 http://wkhtmltopdf.org/downloads.html wget https://bitbucket.org/wkhtmltopdf/wkhtmltopdf/downloads/wkhtmltox-0.13.0-alpha-7b36694_linux-precise-amd64.deb dpkg -i 安裝包名字 當我把它生成pdf的時候我想讓每個塊都是一頁&#xff0c;經過…