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線程: