1. 程式人生 > >vim基礎知識和常用命令

vim基礎知識和常用命令

本篇主要內容是vim的基本知識,常用命令等,不涉及需要額外安裝的外掛。

Vim的相關路徑
/usr/bin/vim
/usr/share/vim/vim/vim63/

配置檔案
/etc/vimrc,此檔案影響整個系統的Vim。
~/.vimrc,此檔案隻影響本使用者的Vim。
~/.vimrc檔案中的配置會覆蓋/etc/vimrc中的配置。

Vim的外掛(plugin)安裝在Vim的runtimepath目錄下,你可以在Vim命令列下執行set rtp命令檢視。

vim(visual improved)有normal、insert、visual、ex(command)四種模式。

insert模式

從normal模式進入insert模式:

i insert, 在當前字元的左邊插入
a append, 在當前字元的右邊插入
I 在當前行首字元(非空白字元)的左邊插入
A 在當前行尾字元的右邊插入
o 在下一行插入
O 在上一行插入
s substitute, 刪除當前字元然後進入插入模式
S 刪除當前行然後進入插入模式

通過c命令進入insert模式在下節介紹。

常用指令

指令 說明
檔案開啟和關閉
vi +3 file 開啟file並移動到第三行
vi + file 開啟file並移動到最後一行
vi + /pattern file 這將使游標移動到第一個滿足pattern的位置
vi -R file 以只讀模式開啟
vim -d file1 file2 以對比模式(diff)開啟檔案
vim -o file1 file2 開啟橫向水平視窗
vim -O file1 file2 開啟縱向垂直視窗
:q quit
:w write
:x write and quit
:qa 退出所有的
:e! 取消所有的更改,回到最初的模樣
游標行內移動
fx 移動游標到當前行的下一個字元x處
Fx 移動游標到當前行的上一個字元x處
tx 移動游標到當前行的下一個字元x左邊的位置
; 重複上面的移動
, 反方向重複上面的移動
0 移動游標到當前行行首
^ 移動游標到當前行第一個非空白字元處
$ 移動游標到當前行行尾
游標跨行跳轉
% 跳轉到配對的括號
[[ 移動游標到上一個行首是{的行
]] 移動游標到下一個行首是{的行
w 移動游標到下一個詞的頭部,以標點和空白分隔
W 同上,但以空白分割,下面的E, B類同
e 移動游標到當前詞或下一個詞的尾部
b 移動游標到當前詞或上一個詞的頭部
兩個單引號,移動游標到游標上次停靠的地方
gd 移動游標到當前游標所在處函式或變數定義的地方
gf 跳轉到相應的標頭檔案(可通過:set path+=xxx來新增標頭檔案目錄xxx)
K 在man裡查詢當前游標所在處的詞
ctrl-b 向上移動一屏
ctrl-f 向下移動一屏
ctrl-u 向上移動半屏
ctrl-d 向下移動半屏
ctrl-e 螢幕向上移動一行
ctrl-y 螢幕向下移動一行
gg 移動游標到檔案首行
G 移動游標到檔案末行
nG或:n 移動游標到第n行
n| 移動到第n列
H 移動游標到當前屏首行
M 移動游標到當前屏中間行
L 移動游標到當前屏末行
3H 使游標移動到當前螢幕的首行的下數第三行
* 移動游標到下一個游標當前所在位置的字串出現的位置
# 移動游標到上一個游標當前所在位置的字串出現的位置
shift-{ 上一個空行
shift-} 下一個空行
50% 跳轉到文件50%處
搜尋和替換
/pattern 搜尋pattern
?pattern 反向搜尋pattern
n 在同一方向重複上一次搜尋命令
N 在反方向上重複上一次搜尋命令
:s/old/new/g 在當前行中將old替換為new,g表示global,替換當前行的所有匹配
:m,ns/old/new/g 在m到n行中進行替換
:%s/old/new/g 全文替換,最後一項如加上c表示confirm,需要確認替換操作
編輯
dd delete, 刪除當前行
cc change, 刪除當前行並進入插入模式
dw 刪除下一個詞,當前位置到下一個詞的開始位置,前閉後開
cw 刪除下一個詞並進入插入模式,當前位置到下一個詞的開始位置,前閉後開
D 刪除從當前游標位置到行尾
C 刪除從當前游標位置到行尾並進入插入模式
x 刪除當前字元
X 刪除前一個字元
yy yank,複製當前行
yj/y1j/2yy 複製兩行
y$ 複製到行尾
p put,在當前位置後貼上
P 在當前位置前貼上
]p 貼上且正確縮排
r replace,修改游標所在字元
R 進入替換模式,相當於按兩次insert鍵
"a 兩個單引號,接下來的yank或paste操作使用使用暫存器a
"ayy 當前行復制到暫存器a中
~ 轉換大小寫
g~iw 當前word切換大小寫
gUiw 當前word大寫
guiw 當前word小寫
gU回車 當前行大寫
程式碼相關
ctrl-p 上一個補全
ctrl-n 下一個補全
ctrl-e 停止補全並回到原來錄入的文字
ctrl-y 停止補全,並接受當前所選的專案
>> 右移本行
<< 左移本行
== 縮排本行
:!cmd 執行shell命令
:r!date 將當前時間插入
gg=G 格式化整個檔案
zf 生成摺疊
zo 開啟游標下的摺疊
zO 迴圈開啟游標下的摺疊,也就是說,如果存在多級摺疊,每一級都會被開啟
zc 關閉游標下的摺疊
zC 迴圈關閉游標下的摺疊
[z 到當前開啟摺疊的開始
]z 到當前開啟摺疊的結束
zj 向下移動到下一個摺疊的開始處
zk 向上移動到上一個摺疊的結束處
標記和巨集
ma 在當前游標的位置標記一個標記,名字為a
‘a 單引號,到書籤a處
‘. 到上次編輯檔案的地方
:marks 檢視標記列表
:delmarks 可以刪除指定標記
qa 開始錄製巨集a,按下q結束錄製
@a 執行巨集a
其他
ctrl-g 文章行數和當前位置佔總行數的百分比
g ctrl-g 文件字數統計
:ab mail [email protected] 以後輸入mail再按空格就會替換為[email protected]
J join,將上下兩行合併,刪除兩行之間的換行符
u 撤銷
. repeat
z 回車 使當前行成為螢幕首行
z. 使當前行成為螢幕中間行
z- 使當前行成為螢幕尾行
多視窗
ctrl-w s split window
ctrl-w v split window vertically
ctrl-w w switch window
ctrl-w q quit a window
多標籤
:tabe filename edit file in new tab
gt next tab
gT previous tab
:tabr first tab
:tabl last tab
:tabm n move current tab after tab n

visual模式

從normal進入visual模式:

v 按字元選擇
V 按行選擇
ctrl-v 按塊(矩形)選擇

可視模式下,可以使用游標移動指令來選擇字元,然後可對所選區域執行刪除、複製等命令,以及以下命令:

U 大寫所選區域字母
u 小寫所選區域字母
~ 更改所選區域字母大小寫
o 移動到標記區域的另一邊
O 移動到標記區域的另一角
< 左移所選區域
> 右移所選區域
= 格式化所選區域

i和a修飾符

i : 內部
a : 周圍
iw : 單詞內(不包括單詞周圍的空格)
aw : 單詞周圍(包括單詞周圍的空格)

i< : 選擇一對“<>”中的所有字元
i{ : 選擇一對“{}”中的所有字元
i[ : 選擇一對“[]”中的所有字元
i( : 選擇一對“()”中的所有字元
it : 選擇一對html標籤內部的所有字元
i" : 選擇一對雙引號中的所有字元
i' : 選擇一對單引號中的所有字元

例如:visual模式下輸入iw會選中游標所在單詞,normal模式下daw會刪除該單詞和單詞周圍的空格。

特別的,如果游標當前位置在雙引號處於同一行並在雙引號前面,只需要輸入ci”就可以刪除雙引號內部的所有內容,並將游標移到雙引號中間進入插入模式。對於單引號和HTML標籤也有效。

ex模式

ex(還是/還有ed?)是Unix下的一個文字編輯器,vi就是ex的“visual mode”,以冒號開頭的命令,都屬於ex命令。
早期的顯示器只有按行顯示的功能,當你希望顯示某行,輸入命令,顯示器上才會顯示那行。而控制顯示器顯示文字的命令列工具,就是ex。
對於大段文字的操作,使用ex命令更方便。
ex的命令都是基於行的,獲得行號有下面幾種方法:

3 直接輸入行號
3,6 行範圍, 前閉後閉
. 當前行
/pattern/ 滿足pattern的第一行
$ 最後一行
% 每一行

部分命令舉例:

命令 說明
:3 顯示第三行
:3,6d 刪除3到6行
:3,6m14 將3到6行放到14行的位置
:.,.+3d 刪除當前行及後面3行,共4行
:/pattern/d 刪除包含pattern的第一行
:/pattern1/,/pattern2/d 刪除從pattern1到pattern2的行
:3,6w another 將3-6行另存為檔案another
:9,13w >> another 將9-13行追加到檔案another後面
:r another 將another檔案的內容追到到當前檔案游標後
:3r another 將another檔案的內容追到到當前檔案第3行後
:1,3co4 將第1到3行復制到第4行後
:1,3t4 將第1到3行復制到第4行後
:1,3 y/ya 複製1到3行到剪下板中
:[range] y/ya name 複製[range]到剪下板中name中
:n pu 把剪下板中的內容貼上到第n行下面
:n pu name 把剪下板中名字為name的拷貝貼上到第n行下面

tips

'''.'a中的引號可以是單引號,也可以是反引號,不同之處在於反引號在跳轉時會精確到列,而單引號不會回到跳轉時游標所在的那一列,而是把游標放在第一個非空白字元上。

''只能回到上次跳轉位置上,如果想回到更老的跳轉位置,使用命令ctrl-o,與它相對應的,是ctrl-i,它跳轉到更新的跳轉位置。這兩個命令前面可以加數字來表示倍數。使用命令:jumps可以檢視跳轉表。

如果檔案沒有修改:x不會修改檔案的時間戳,因此就不需要重新編譯。而:wq命令,即使檔案未修改也會修改時間戳,也即會觸發重新編譯。

通過/\<word\>來匹配整個詞,而不是詞的一部分,*和#就是這樣查詢的。

在編輯模式下,可以通過Ctrl+T手動增加本行縮排,Ctrl+D手動減少本行縮排。

通過:!sh來開啟一個新的解析器,這樣就省去了通過ex一行一行輸入命令的時間,可以在使用完sh後,通過Ctrl+D回到vim。

使用”q/”和”q?”命令,在vim視窗最下面開啟一個新的視窗,這個視窗會列出你的查詢歷史記錄,你可以使用任何vim編輯命令對此視窗的內容進行編輯,然後再按回車,就會對游標所在的行的內容進行查詢。

在normal模式下按下Ctrl+z組合鍵,vim就會被丟到後臺執行,fg切換後臺任務。

ctags

vim預設安裝了ctags。它遍歷原始碼檔案生成tags檔案,這些tags檔案能被編輯器或其它工具用來快速查詢定位原始碼中的符號(tag/symbol),如變數名,函式名等。

進入專案程式碼根目錄,在shell裡執行以下命令:
ctags -R
會在原始碼目錄生成tags檔案,Vim預設會自動讀取當前目錄下的tags檔案。可以在vi中輸入變數名來查詢tag,如:
:tag zgame
將查詢包含變數名為zgame的符號。
也可以在編輯模式下,在函式或變數上面按下ctrl+],游標將自動跳轉到他們的定義處,按ctrl-t,則回到上次跳轉前的位置。

也可以在vim裡設定tags檔案的位置:
:set tags=~/vim63/tags

my vimrc

" Sets how many lines of history VIM has to remember
set history=60

" display line number
set number

" Enable syntax highlighting
syntax enable

colorscheme desert
set background=dark

let mapleader = ","
let g:mapleader = ","

" Disable highlight when <leader><cr> is pressed
map <silent> <leader><cr> :noh<cr>

" Smart way to move between windows
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l

" Enable filetype plugins
filetype plugin on
filetype indent on

" Set 5 lines to the cursor - when moving vertically using j/k
set so=5

" Ignore case when searching
set ignorecase

" When searching try to be smart about cases
" 小寫字元忽略大小寫,有大寫字元則精確匹配
set smartcase

" Highlight search results
set hlsearch

" Makes search act like search in modern browsers
" 顯示實時搜尋效果
set incsearch

" Use spaces instead of tabs
set expandtab

" Be smart when using tabs
set smarttab

" 1 tab == 4 spaces
set shiftwidth=4
set tabstop=4

set ai "autoindent
set si "Smart indent

" 檔案路徑 格式 檔案型別 ascii碼 行列 百分比
set statusline=%F\ [%{&ff}]\ [%Y]\ [\%b/0x\%B]\ (%l,%v)[%p%%]

" 這個命令會確保你的狀態條總會顯示在視窗的倒數第二行
set laststatus=2

" 高亮匹配括號對,這樣當你輸入右括號時,游標會暫時跳轉到左括號處閃爍
set showmatch

" 簡單的除錯用
namp <F10> osystem("echo \"\" >> ~/my.log");<Esc>16hi
iamp <F10> system("echo \"\" >> ~/my.log");<Esc>16hi

" 備份檔案的儲存位置
set backupdir=/tmp

" 解決一些亂碼問題
set fileencodings=utf-8,gbk

" 新增一些標頭檔案的目錄,使'g f'命令更好用
set path=.,/usr/include,一些自定義目錄

參考

相關推薦

vim基礎知識常用命令

本篇主要內容是vim的基本知識,常用命令等,不涉及需要額外安裝的外掛。 Vim的相關路徑 /usr/bin/vim /usr/share/vim/vim/vim63/ 配置檔案 /etc/vimrc,此檔案影響整個系統的Vim。 ~/.vimrc,此

linux基礎知識常用命令

col head 內置 文件命令 數據 類型 符號鏈接 內容 鏈接 概要 linux版本   linux有兩種版本:發行版本和核心版本。核心版本主要是linux內核,官方版是由linus維護。  linux核心版本表示:major.minor.patchlevel。例如 2

Linux基礎知識常用命令

1、Linux上的檔案管理類命令都有哪些,其常用的使用方法及其相關示例演示。 主要命令:cd、ls、pwd、cat、cp、mv、rm等,主要說明後三種:     1)cp命令:複製       &nb

MySQL基礎概念常用命令

  MySQL的命令不區分大小寫,但建議關鍵字大寫     一、資料庫的相關概念 1、什麼是資料庫 ?      資料的倉庫      DB:database,資料庫,裡邊儲存了有組

MongoDB基礎知識常用命令

SQL術語/概念 MongoDB術語/概念 解釋/說明 database database 資料庫 table collection 資料庫表/集合 row docu

資料庫學習的一些基礎知識常用命令(部分)

【資料庫基本概念】 一個表只能有一個主鍵(primary key),主鍵列不允許為空值(null) 一個表中可以有多個列作為主鍵列,但需要考慮最少性和穩定性 外來鍵(foreign key):確保“從表”中的某個資料項在“主表”中必須存在 【基本術語】 D

Linux基礎知識——Linux常用命令大全

一、檢視 ls 作用:列出目錄內容格式:ls [選項] [目錄名] 注意:命令格式[]中的內容為非必選項 ls命令選項 -a 列出目錄下的所有檔案,包含.開頭的隱藏檔案-l 列出檔案的詳細資訊-i 檢視檔案的iNode號(iNode會指向檔案塊所在的位置)-h 以容易讀取的方式顯示檔案大小-d 僅列出目

Linux基礎知識常用命令

基礎知識點:1、描述計算機的組成及其功能。2、按系列羅列Linux的發行版,並描述不同發行版之間的聯絡與區別。3、描述Linux的哲學思想,並按照自己的理解對其進行解釋性描述。4、說明Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、hist

Linux基礎知識常用命令

一.基本命令 1檢視目錄清單ls 用ls -l看到的是修改時間,加上選項-u,即用ls -lu看到的是訪問時間。 2.瀏覽檔案命令cat、more、less、head和tail 3檔案統計命令wc 4改變當前工作目錄命令cd 5建立目錄命令mkdir 6複製命令cp

Linux入門-基礎知識常用命令

Linux是一款開源的作業系統核心,基於Linux核心,加上shell和各類工具軟體,就組成了我們常說的:“Linux作業系統”。什麼是shellshell俗稱殼,是提供給我們使用介面(命令解析器),並且保護系統核心不被篡改的軟體。我們所有的指令都是通過shell傳達給lin

Windows權限提升基礎知識命令

load bject -c start pan 啟動程序 pow xxx down 介紹 這篇文章是介紹window的權限提升,雖然不是一個全面的指南,但會試圖覆蓋主要的技術,常用的資源列表在文章底部,可供大家參考。 window權限提升基礎知識 初始信息收集 在開

Redis:基礎知識及其常用數據類型關鍵字

服務器 模式 hashtable sele 進行 模擬 交集 替換 差集 Redis: Redis是什麽: REmote DIctionary Server(遠程字典服務器) 是完全開源免費的,用C語言編寫的,遵守BSD協議,是一個高性能的(Key-Value)分布式

Linux 基礎知識( rpm 命令安裝軟體 、第三方平臺的搭建 網路源)

一、RPM簡單介紹 RPM是Linux開發商將原始碼在特定硬體平臺和作業系統平臺上編譯後,記載軟體相依性應編輯成檔案,並將這兩者打包成的一個特殊格式的檔案。使用RPM安裝後,各文件會被安裝到特定的目錄下,所以很方便查詢、升級(使用YUM)與解除安裝。 二、下載軟體安裝包 我的軟體

嵌入式Linux基礎知識5(ubuntu16”命令列模式圖形介面切換“ “開機自動進入命令列模式設定”)

需求說明:IPC專案需要Linux系統,知識儲備 第一部分:ubuntu 命令列模式和圖形介面切換 第二部分:ubuntu開機直接進入命令列模式 注:Ubuntu影象介面下 通過快捷鍵 ctrl+alt+t 可以進行命令列操作 第一部分:ubuntu 命令列模

hbase shell基礎常用命令詳解(轉)

hbase提供了一個shell的終端給使用者互動。使用命令hbase shell進入命令介面。通過執行 help可以看到命令的幫助資訊。 以網上的一個學生成績表的例子來演示hbase的用法。 name grad course math art Tom 5 97 87 Jim 4 8

Linux基礎系列:常用命令(2)

用戶和組 查看 -- tdi 作業二 其他 配置文件 解鎖 gid 1 作業一: 2 1) 新建用戶natasha,uid為1000,gid為555,備註信息為“master” 3 groupadd -g 555 natasha 4 useradd -u

Linux基礎系列:常用命令(5)_nfs服務與nginx服務

ash .com access emctl 磁盤 keepalive roo inux iptable 介紹:   NFS 是Network File System的縮寫,即網絡文件系統。一種使用於分散式文件系統的協定,由Sun公司開發,於1984年向外公布。功能是通過

【轉】 javaweb 基礎知識 Tomcat 是什麽

att logic 資源 spa 文件系統 png intra 很快 應用開發 JavaWeb學習總結(一)——JavaWeb開發入門 一、基本概念 1.1、WEB開發的相關知識   WEB,在英語中web即表示網頁的意思,它用於表示Internet主機上供外界訪問的資

lvm基本知識常用命令

pv vg lv linux lvm lvm基礎知識: lvm是Logical Volume Manager(邏輯卷管理)的縮寫,可以理解為一種硬盤分區管理工具,有以下幾個重要的基礎術語:物理卷(Pyhsical Volume,PV):是由系統的基礎存儲設備,如/dev/sda,/d

初識多線程之基礎知識常用方法

splay 線程與進程 -- 實現 class png sleep .com code 1.線程與進程的描述: 1.1進程:每個進程都有獨立的代碼和數據空間(進程上下文),進程間的切換會有較大的開銷,一個進程包含1~n個線程。(進程是資源分配的最小單位)   1.2線程: