Linux shell 学习笔记(6)— vim 编辑器使用方法及技巧
1. 檢查 vim 軟件包
1.1 CentOS 發行版
$ alias vi
alias vi='vim'
$
$ which vim
/usr/bin/vim
$
$ ls -l /usr/bin/vim
-rwxr-xr-x. 1 root root 1967072 Apr 5 2012 /usr/bin/vim
$
?
1.2 Ubuntu 發行版
在 Ubuntu 發行版中不僅沒有 vi 命令的別名,而且 /usr/bin/vi 程序屬于一系列文件鏈接中的一環。
$ alias vi
-bash: alias: vi: not found
$
$ which vi
/usr/bin/vi
$
$ ls -l /usr/bin/vi
lrwxrwxrwx 1 root root 20 Apr 22 12:39
/usr/bin/vi -> /etc/alternatives/vi
$
$ ls -l /etc/alternatives/vi
lrwxrwxrwx 1 root root 17 Apr 22 12:33
/etc/alternatives/vi -> /usr/bin/vim.tiny
$
$ ls -l /usr/bin/vim.tiny
-rwxr-xr-x 1 root root 884360 Jan 2 14:40
/usr/bin/vim.tiny
$
$ readlink -f /usr/bin/vi
/usr/bin/vim.tiny
因此,當輸入 vi 命令時,執行的是程序 /usr/bin/vim.tiny。vim.tiny 只提供少量的 vim 編輯器功能。如果特別需要 vim 編輯器,而且使用的又是 Ubuntu,那至少應該安裝一個基礎版本的 vim 包。
使用 readlink –f 命令能夠立刻找出鏈接文件的最后一環。
在 Ubuntu 發行版中安裝基礎版的 vim 包非常簡單。
$ sudo apt-get install vim
[...]
The following extra packages will be installed:
vim-runtime
Suggested packages:
ctags vim-doc vim-scripts
The following NEW packages will be installed:
vim vim-runtime
[...]
$
$ readlink -f /usr/bin/vi
/usr/bin/vim.basic
$
基礎版的 vim 現在安裝好了,/usr/bin/vi 的文件鏈接會自動更改成指向 /usr/bin/vim.basic。以后再輸入 vi 命令的時候,使用的就是基礎版的 vim 編輯器了。
2. vim 基礎
vim 編輯器有兩種操作模式:
-
普通模式
當你剛打開要編輯的文件時(或新建一個文件時),vim 編輯器會進入普通模式。在普通模式中,vim 編輯器會將按鍵解釋成命令
-
插入模式
在插入模式下,vim 會將你在當前光標位置輸入的每個鍵都插入到緩沖區。按下i鍵就可以進入插入模式。要退出插入模式回到普通模式,按下鍵盤上的退出鍵(Esc 鍵,也就是 Escape 鍵)就可以了。
在普通模式中,可以用方向鍵在文本區域移動光標(只要 vim 能正確識別你的終端類型)。如果你恰巧在一個古怪的沒有定義方向鍵的終端連接上,也不是完全沒有希望。vim 中有用來移動光標的命令。
- h:左移一個字符
- j:下移一行(文本中的下一行)
- k:上移一行(文本中的上一行)
- l:右移一個字符
在大的文本文件中一行一行地來回移動會特別麻煩,幸而 vim 提供了一些能夠提高移動速度的命令。
- PageDown(或Ctrl+F):下翻一屏
- PageUp(或Ctrl+B):上翻一屏
- G:移到緩沖區的最后一行
- num G:移動到緩沖區中的第num行
- gg:移到緩沖區的第一行
vim 編輯器在普通模式下有個特別的功能叫命令行模式。命令行模式提供了一個交互式命令行,可以輸入額外的命令來控制vim 的行為。要進入命令行模式,在普通模式下按下冒號鍵。光標會移動到消息行,然后出現冒號,等待輸入命令。
在命令行模式下有幾個命令可以將緩沖區的數據保存到文件中并退出 vim。
- q:如果未修改緩沖區數據,退出
- q!:取消所有對緩沖區數據的修改并退出
- w filename:將文件保存到另一個文件中
- wq:將緩沖區數據保存到文件中并退出
3. 編輯數據
有些編輯命令允許使用數字修飾符來指定重復該命令多少次。比如,命令 2x 會刪除從光標當前位置開始的兩個字符,命令5dd 會刪除從光標當前所在行開始的 5 行。
4. 復制和粘貼
剪切和粘貼相對容易一些。你已經看到表 10-1 中用來從緩沖區中刪除數據的命令。但 vim 在刪除數據時,實際上會將數據保存在單獨的一個寄存器中??梢杂胮命令取回數據。
舉例來說,可以用 dd 命令刪除一行文本,然后把光標移動到緩沖區的某個要放置該行文本的位置,然后用 p 命令。該命令會將文本插入到當前光標所在行之后??梢詫⑺腿魏蝿h除文本的命令一起搭配使用。
復制文本則要稍微復雜點。vim 中復制命令是 y(代表yank)??梢栽?y 后面使用和 d 命令相同的第二字符(yw 表示復制一個單詞,y$ 表示復制到行尾)。在復制文本后,把光標移動到你想放置文本的地方,輸入 p 命令。復制的文本就會出現在該位置。
可視模式會在你移動光標時高亮顯示文本。可以用可視模式選取要復制的文本。要進入可視模式,應移動光標到要開始復制的位置,并按下 v 鍵。你會注意到光標所在位置的文本已經被高亮顯示了。下一步,移動光標來覆蓋你想要復制的文本(甚至可以向下移動幾行來復制更多行的文本)。在移動光標時,vim 會高亮顯示復制區域的文本。在覆蓋了要復制的文本后,按 y 鍵來激活復制命令。現在寄存器中已經有了要復制的文本,移動光標到你要放置的位置,使用 p 命令來粘貼。
5. 查找和替換
可以使用 vim 查找命令來輕松查找緩沖區中的數據。要輸入一個查找字符串,就按下斜線(/)鍵。光標會跑到消息行,然后 vim 會顯示出斜線。在輸入你要查找的文本后,按下回車鍵。vim 編輯器會采用以下三種回應中的一種。
- 如果要查找的文本出現在光標當前位置之后,則光標會跳到該文本出現的第一個位置。
- 如果要查找的文本未在光標當前位置之后出現,則光標會繞過文件末尾,出現在該文本所在的第一個位置(并用一條消息指明)。
- 輸出一條錯誤消息,說明在文件中沒有找到要查找的文本。
要繼續查找同一個單詞,按下斜線鍵,然后按回車鍵。或者使用 n 鍵,表示下一個(next)。
替換命令允許你快速用另一個單詞來替換文本中的某個單詞。必須進入命令行模式才能使用替換命令。替換命令的格式是:
:s/old/new/
vim 編輯器會跳到 old 第一次出現的地方,并用 new 來替換??梢詫μ鎿Q命令作一些修改來替換多處文本。
:s/old/new/g: 一行命令替換所有old
:n,ms/old/new/g: 替換行號n和m之間所有old
:%s/old/new/g: 替換整個文件中的所有old
:%s/old/new/gc: 替換整個文件中的所有old,但在每次出現時提示
常用搜索命令操作:
| 命令 | 說明 |
|---|---|
| / | 在搜索命令下,正向搜索 |
| ? | 在搜索命令下,反向搜索 |
| n | 繼續搜索下一個匹配的單詞 |
| N | 繼續搜索上一個匹配的單詞 |
| * | 在Normal下,正向搜索當前光標下的單詞 |
| # | 在Normal下,反向搜索當前光標下的單詞 |
高級搜索命令操作:
| 命令 | 說明 |
|---|---|
| ^ | 一行的開頭【查找在行首的特定字符(^用來匹配行首)】 |
| $ | 一行的結尾 |
| . | 任意一個字符 |
| * | 匹配0次或n次 |
6. 補充
6.1 單詞補全
Ctrl+n :當你輸入第一個字母的時候,再按 Ctrl+n,自動出現下拉菜單,單詞默認選中第一個,繼續按 Ctrl+n,Ctrl+p 可以上下選擇,如果緩沖區還沒有可選的單詞,那么下拉列表不會有選項。
Ctrl+p :同上,只是默認的選中的是列表中最后一個單詞。
6.2 行補全
Ctrl+x Ctrl+l:兩個命令組合使用。在插入模式下輸入已經存在行的第一個單詞,再按這兩個鍵,就會列出該整行出來。
6.3 光標移動
| 命令 | 說明 |
|---|---|
| w | 移動到下一個單詞的起始處(w,代表的意思就是word) |
| W | 移動到下一個單詞的起始處 |
| b | 移動到前一個單詞的起始處 |
| B | 移動到前一個單詞的起始處(b和B的區別與w和W是同理的) |
| 0 | 移動到行首 (數字0) |
| $ | 移動到行末 |
| ^ | 移動到當前行的第一個非空字符處(如果該行首沒有空格,那么效果與0是一樣的) |
| g_ | 移動到當前行的最后一個非空格字符處 |
那么 w 和 W 它倆有什么區別呢,小寫的w會把一個單詞理解成由連續的字母或數字或特殊字符,而大寫的 W 以空格來識別是否到了下一個單詞
6.4 插入、追加字符
| 命令 | 說明 |
|---|---|
| i | 在當前光標位置插入字符 |
| o | 在當前行往下插入新的一空行 |
| O | 在當前行往上插入新的一空行 |
| a | 在當前光標后追加字 |
| R | 替換當前光標的字符直到退出插入模式(按ESC) |
| :r filename | 把文件名為filename的內容插入當前行下一行 |
| :r! command | 把command返回的結果插入到當前行的下一行 |
6.5 拷貝字符
| 命令 | 說明 |
|---|---|
| yw | 拷貝當前的一個單詞 |
| y0 | 拷貝的范圍是當前光標處到行首 |
| y$ | 拷貝的范圍是當前光標處到行尾 |
| yy | 拷貝當前行 |
| nyy | 從當前行開始拷貝n行(這里的n是數字) |
6.6 刪除字符
| 命令 | 說明 |
|---|---|
| x | 刪除當前光標處字符 |
| dw | 刪除當前光標出一個單詞 |
| d0 | 刪除光標處到行首的字符 |
| d$ | 刪除光標處到行尾的字符 |
| dd | 刪除整行 |
| ndd | 刪除n行(同樣n代表數字) |
6.7 替換命令
Vim 可以利用 :substitute 命令將指定的字符替換成其他字符,通常使用命令的縮寫格式 ?。借用正則表達式則可以實現更為豐富的替換功能,基本語法是:
:[range]s/源字符串/目標字符串/[option]
range 和 option 是可以缺省不填的,各個字段的意思是:
range: 代表檢索范圍,默認缺省表示當前行檢索,1,10表示從第1到第10行,%代表整個文件,等價于1,,而.,,而.,,而.,代表從當前行到文件末尾
s: substitute的簡寫,代表替換
option: 代表操作類型,默認缺省只對第一個匹配的字符進行替換,g(global)全局替換,c(comfirm)操作時確認,i(ignorecase)不區分大小寫,這些選項可以組合使用
比如以下命令,將會顯示將要做改動的文本并要求確認:
:1,$s/foo/bar/gc
replace with foo(y/n/a/q/l/E/Y)?
這時你可以選擇如下操作:
y Yes:執行這個替換
n No:取消這個替換
a All:執行所有替換而不要再詢問
q Quit:退出而不做任何改動
l Last:替換完當前匹配點后退出
Ctrl-E 向上翻滾一行
Ctrl-Y 向下翻滾一行
6.8 實用案例
- 將光標所在行出現的所有包含aa的字符串中aa替換為bb
:s/aa/bb/g
- 將文檔中出現的所有包含aa的字符串中的aa 替換為bb
:%s/aa/bb/g
- 將從12行到23行中出現的所有包含aa的字符串中的aa替換為bb
:12,23s/aa/bb/g
- 全文的行首加入 # 字符,在Python中批量注釋的時候非常有用
:%s/^/#/
- 將所有行尾多余的空格刪除
:%s= *$==
- 刪除所有的空行, 這里的g表示對文章中所有符合要求字符串執行替換操作,^ 表示行首,$ 表示行尾
:g/^$/d
7. vim新手技巧
7.1. 配置 vimrc
當我最初使用 vim 的時候,我浪費了好多時間來縮進代碼,我不知道通過修改 Vim 的 .vimrc 配置文件來實現代碼縮進、語法高亮、顯示行號等功能。
在你的 Home 目錄下創建一個 .vimrc 文件,添加下面的代碼來設置行號、代碼縮進等。
set number # 顯示行號 set autoindent # 自動縮進 set nowrap # 不換行
7.2 不關閉終端退出編輯器
使用 Vim 編輯器保存并退出編輯狀態是一件輕而易舉的事,你只需記住按 ESC 鍵切換到正常模式,然后輸入冒號(?,之后輸入 wq 即可實現保存并退出。
: wq
如果不想保存,則按 ESC 鍵切換到正常模式,然后輸入冒號(?,之后輸入 q! 即可。
: q!
7.3 刪除一行或多行
通過退格鍵(Backspace)來刪除一行代碼顯然是太麻煩了??梢酝ㄟ^切換到正常模式(編輯模式下按 ESC 鍵)來進行操作:
dd : (輸入兩次 d,下同)刪除當前行;5dd :刪除當前行開始的5行; dG :(先輸入d,然后按 shift 鍵輸入 g)刪除當前行至最后一行的所以行。
7.4 復制粘貼一塊代碼
你可能經常需要復制一行或一大塊代碼,使用 Vim 快捷鍵來實現此功能是非常簡單的:
按 Esc 切換到正常模式;
把光標移到你需要復制的代碼行首;
按 V 選擇整行,可移動光標選擇多行;
按 d 剪切或按 y 復制選擇的代碼;
移動光標到你需要粘貼的位置,按 p 粘貼代碼到光標后的位置,或按 P 粘貼到光標前。
7.5 撤銷與重做
在使用 Vim 或其他編輯器的時候,你可能經常需要對某些修改進行撤銷或重做。在 Vim 中,你可以切換到正常模式,按 u 來撤銷操作,按 Ctrl+r 來重做。
7.6 代碼注釋
代碼注釋:
按 Ctrl+v 切換到可視化模式;
移動光標(j 或 k)選中需要注釋的行的開頭;
按大寫 I,然后輸入注釋符,如 #; 最后按 Esc。
取消注釋:
按 Ctrl+v 切換到可視化模式;
按 j 或 k 選擇要刪除的注釋符;
按 d 或 x 刪除注釋符
如果使用 // 符號注釋,則取消注釋時需進行兩遍操作。
7.7 搜索
搜索在很多時候都是一個非常重要的功能。在文件中搜索一個特定的詞,可以切換到正常模式,然后輸入斜線( / ),之后跟上要搜索的詞,回車即可。
/word-to-be-searched
按 n 顯示下一個搜索結果,按 N 顯示上一個搜索結果。
7.8 把外部文件讀入 Vim
我開始使用 Vim 的時候,經常會打開一個文件、復制內容、關閉文件、打開另一個文件、然后粘貼進去復制到內容。其實 Vim 中讀取另一個文件的內容非常方便。切換到正常模式,然后按 :read。使用此快捷鍵你不需要手動打開文件來復制內容。
:read readme.md
7.9 把命令的結果讀入 Vim
有時候你需要把某個命令的結果復制到 Vim 中,這在 Vim 也非常簡單。切換到正常模式,然后輸入 :read !command 即可把 command 的結果輸入到 vim 中。
:read !ls -l
7.10 切換到上次修改的位置
想知道你在文件中做的最后一次修改是在什么位置?切換到正常模式,輸入 g; 來即可切換到上次修改的位置。
7.11 移動到文件頂部或底部
當需要移動到文件頂部或底部時,通過 j 或 k 來一行行的移動顯得有點麻煩。Vim 提供了一個快捷鍵可直接實現此功能。切換到正常模式,輸入 gg 返回文件頂部,輸入 G 返回文件底部。
其它參考:
http://blog.csdn.net/niushuai666/article/details/7275406
http://blog.csdn.net/ljfbest/article/details/7492342
http://blog.csdn.net/yizhu2000/article/details/7068842
http://blog.csdn.net/youngerhao/article/details/7063984
http://www.csdn.net/article/2015-07-24/2825287/1
http://blog.jobbole.com/100326/
http://www.cnblogs.com/peida/archive/2012/10/23/2734829.html
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
總結
以上是生活随笔為你收集整理的Linux shell 学习笔记(6)— vim 编辑器使用方法及技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux shell 学习笔记(5)—
- 下一篇: Linux shell 学习笔记(7)—