-
normal模式下????????h 左移? j 下移 k 上移 l 右移????????w/W 移到下一個word/WORD開頭, e/E下一個word/WORD尾????????b/B 回到上一個word/WORD開頭,可以理解為backword????????word指的是以非空白符分割的單詞,WORD以空白符分割的單詞????????主要使用w和b行間搜索移動:使用f{char}可以移動到char字符上,t移動到char的前一個字符;/,繼續(xù)搜索下一個/上一個大寫的F表示反過來搜前面的字符0移動到行首,$移動到行尾vim頁面移動gg/G移動到文件開頭/結尾ctrl+o 快速返回上次編輯位置H/M/L 跳轉屏幕開頭,中間,結尾(Head, Middle, Lower)Ctrl + u, Ctrl + f上下翻頁(upward, forward)zz把屏幕置為中間
:syntax on 語法高亮
() 在句子間移動
:help( 查看幫助
easy-motion 插件移動
normal 移動的快捷方式:
w/W: 移動到下一個word/WORD 開頭
e/E: 移動到下一個 word/WORD 結尾
b/B: 移動到上一個 word/WORD 開頭? (backword)
行間搜索移動
f{char}: 當前光標往行后搜索字符, 分號(;)下一個找到的字符,逗號(,)上一個找到的字符
F{char}: 當前光標往前搜索字符
0: 移動到行首第一個字符
^: 移動到第一個非空白字符
$: 移動到行尾
g_: 移動到行尾非空白字符
頁面移動
gg: 文件開頭
G: 文件結尾
H: 屏幕的開頭(Head)
M: 屏幕的中間(Middle)
L: 屏幕的結尾(Lower)
crtl+u: 上翻頁(upword)
ctrl+f: 下翻頁(forword)
zz: 屏幕置為中間
移動命令。
w? : next word head
e? ?: next word end
b? ?: previous word head
f{char}? ?: find a char in the line
????;? :? to find the next same char
F{char}? ?:? do f in reverse
0? ?: move to the head of the row
$? ?: move to the end of the row
gg : move to the head
G? ?:? move to the end
^o? ?: go back the privious
H/M/L : move the head / middle /lower of file
^u? ?: pageup
^f? ?: pagedown
zz? ?: set the screen to the middle
查看全部 -
使用a/i/o進入插入模式;ctrl+h 刪除上一個字符ctrl+w 刪除上一個單詞ctrl+u 刪除 當前行使用 ctrl+c代替Esc(但是可能會中斷某些插件),所以推薦使用 ctrl+[gi 快速跳轉到最后一次編輯的地方并進入插入模式
輸入模式下快速糾錯(終端下也有類似的快捷鍵)
? ctrl+h 刪除上一個字符?
? ctrl+w 刪除上一個單詞?
? ctrl+u 刪除當前行?
? ctrl+a (終端) 快速移動到開頭?
? ctrl+e (終端)快速移動到結尾?
? ctrl+f (終端)光標后移?
? ctrl+b (終端)光標遷移?
2. 快速切換 insert 和 normal 模式?
????insert -> normal: ctrl+c 或者 ctrl+[
? ? gi: normal 模式切換到 insert 模式,且到上次編輯的地方
^h 刪除上個字符
^w 刪除上個單詞
^u 刪除至開頭
^[? Esc
Shell
????^a? 跳轉到開頭
? ? ^e 跳轉到結尾
查看全部 -
1、sp、vs可進行分屏編輯;2、% s/str1/str2/[g]? 可進行文本[全局]替換;3、normal模式下,v/V進行可視化(光標/整行選中)操作;4、y命令可以復制選中的塊,p可以粘貼復制的塊。
vim4種模式
Normal普通模式(瀏覽)
? ? Esc插入模式回到普通模式
? ? 普通模式下進行各種命令操作和移動
? ? 大部分情況下,使用的是瀏覽
Insert插入模式(編輯)
? ? a/i/o 光標進入插入模式
? ? A/I/O 行進入插入模式
Command命令模式(操作)
? ? Normal模式下:進入命令模式
? ? :q退出 :w保存?
? ? :vs(vertical split)垂直左右分屏 :sp(split) 水平上下分屏
? ? :set nu 設置行號
? ? :% s/java/python/g? 全部替換java->python
Visual可視模式(選擇)
? ? Nomal模式下進入Visual模式
? ? v選擇字符
? ? V選擇行
? ? ctrl+v塊狀選擇
Vim編輯模式:Nomal模式(ESC)Insert模式(a,i,o,A,I,O)Command模式Visual模式(v,V)
進入vim默認是normal模式
還有 : cmd命令模式 和 v(visual)可視化模式
命令模式:
保存? :w
退出? :q
保存并退出? ?:wq
縱向分屏? :vs
橫向分屏? :sp
全局替換? ?:% s/foo/bar/g? ? ? (foo被替換的,bar替換后的)
設置顯示行號? :set nu
Visual模式:
normal模式下使用 v 進入 visual 模式選擇
使用 V 選擇行
使用 ctrl+v 進行塊狀選擇
:vs?縱向分屏
:sp?橫向分屏
:set nu?顯示行號
:% s/[original]/[new]/g?全局替換[original]為[new]
進入可視化模式:
v?進入字符選擇
V?進入行選擇
C-v?進入塊選擇
查看全部 -
a append
i insert
o open a line below
A append after line?
I insert before line?
O? append a line above
a:當前字符的后一個位置插入
i:當前字符的前一個位置插入
o:當前編輯位置下面新起一行
A:在行最后位置插入
I:? 在行最前的位置插入
O:在當前編輯位置的上面新起一行
:w:保存
:wq:保存并退出(w and q)
i ? insert ?在當前字符前面插入
a ?append ? ?在當前字符后面插入
o ?open a line blow 在當前行的下一行插入查看全部 -
## 2-13 裸的vim
- 很多初學者Vim基本命令都不熟就開始找一些復雜的強大配置
- 不利于你熟悉Vim,一旦出問題了你還不知道怎么修復
- 建議初學者還是從裸的Vim開始學習,有些場景比如服務器或者容器上我們沒法配置Vim
學之前,先用對打字指法和盲打
- 編輯代碼,腦子- -般比手快,盲打有利于跟上你的大腦速度
- 裸的Vim也有很多強大功能和使用方式,本章你應該學到了不少
- 學會了用Vim ,你可以在你的IDE.上安裝Vim插件,幾乎所有流行的編輯器和IDE工具都支持Vim插件
查看全部 -
## 2-12 給vimhr個配色
### vim更換配色
- 使用:colorscheme顯示當前主題配色,默認是default
- 用:colorscheme <ctrl+d>可以顯示所有配色
- 中意的配色后,用:colorscheme 配色名就可以修改配色
查看全部 -
## 2-11 vim補全大法
### 什么是補全
- 補全是根據當前環(huán)境上下文有編輯器【猜】你想輸入的東西
- 比如補全一個單詞、文件名、或者代碼中的函數名、變量名
- vim中提供了多種補全功能,還有由插件拓展功能實現(xiàn)代碼補全
### vim中常見的補全
vim中有很多種補全方式
| 命令? ?| 補全類型? ?|
| ------ | ---------- |
| \<C-n> | 補全關鍵字 |
|\<C-x>\<C-n>|當前緩沖區(qū)關鍵字|
|\<C-x>\<C-i>|包含文件關鍵字|
|\<C-x>\<C-j>|標簽關鍵字|
|\<C-x>\<C-k>|字典查找|
|\<C-x>\<C-l>|整行補全|
|\<C-x>\<C-f>|文件名補全|
|\<C-x><C-0>|全能(Omin)補全|
### 常見的三種補全類型
- 使用Ctrl+n和Ctrl+p補全單詞
- 使用Ctrl+x,Ctrl+f補全文件名
- 使用Ctrl+x,Ctrl+o補全代碼,需要開啟文件類型檢查,安裝插件
查看全部 -
## 2-10 vim宏(macro)
### 從需求說起
批量處理文本
### 什么是vim宏(macro)
- 宏可以看成是一系列命令的集合
- 我們可以使用宏【錄制】一系列操作,然后用于回放
- 宏可以方便的把一下列命令用在多行文本上
### 如何使用宏
- vim使用q來錄制,同時也也是q結束錄制
- 使用q{register}選擇要保存的寄存器,把錄制的命令保存其中
- 使用@{register}回放寄存器中保存的一系列命令
### 用宏解決剛才的問題
- 獻給一行加上雙引號,讓后在回放到其他行
- 我們先使用q開始錄制,給一行加上雙引號,之后使用q退出
- 在剩下的所有行中回放錄制的宏
查看全部 -
## 2-9 vim復制粘貼與寄存器的使用
### vim在Normal模式復制粘貼
- Normal模式下復制粘貼分別使用y(yank)和p(put),剪切d和p
- 可以使用v(visual)命令選中所要復制的地方,然后順遂p粘貼
- 配合文本對象:比如順遂yiw復制一個單詞,yy復制一
### Insert模式下的復制粘貼
- 和其他文本編輯器差不多,但粘貼代碼有個坑
- 在vimrc中設置了autoindent,粘貼Python代碼縮進錯亂
- 這個時候需要使用`:set paste`和`:setnopaste`解決
### 什么是vim的寄存器
- vim里操作的是寄存器而不是系統(tǒng)剪切版,這和其他編輯器不同
- 默認使用d刪除或者y復制的內容都放到了“無名寄存器”
- 用x刪除一個字符放到無名寄存器,然后p粘貼,可以調換倆字符
### 深入寄存器(register)
- 通過`"{register}`前綴可以指定寄存器,不指定默認無名寄存器
- 比如使用`"ayiw`復制一個單詞到寄存器a中,'bdd刪除當前行到寄存器b中
- :reg a查看寄存器a中的內容
- "a p粘貼a寄存器中的內容
### 其他常見寄存器
除了有名的寄存器a-z,vim中還有一些其他常見寄存器
- 復制專用寄存器`"0`使用y復制的文本同時會被考唄到復制寄存器0
- 系統(tǒng)剪切版`"+`可以復制到系統(tǒng)剪切版
- 其他寄存器,比如`"%`當前文件名,`".`上次插入的文本
- :set clipboard=unnamed可以讓你直接復制粘貼系統(tǒng)剪切版內容
查看全部 -
## 2-8 什么是vim的text object
### Text Object(文本對象)
- vim里文本也有對象的概念,比如一個單詞,一段句子,一個段落
- 很多其他編輯器經常只能操作單個字符來修改文本,比較低效
- 通過操作文本對象來修改要比只操作單字符高效
### 文本對象操作方式
- `[number]<command>[text object]`
- number 表示次數,command是命令,d(delete),c(change),y(yank)
- text object是操作的文本對象,比如單詞w,句子s,段落p
查看全部 -
## 2-7 vim多文件操作
### Buffer,Window,Tab
- Buffer是指打開的一個文件的內存緩沖區(qū)
- 窗口是Buffer可視化的分割區(qū)域
- Tab可以組織窗口位一個工作區(qū)
#### Buffer
#####Buffer-什么是緩沖區(qū)?
- vim打開一個文件后會加載文件內容到緩沖區(qū)
- 之后的修改都是針對內存著的緩沖區(qū),并不會直接保存到文件
- 直到我們執(zhí)行:w(write)的時候才會把修改內容寫入到文件里
##### Buffer切換
- 使用:ls會列舉當前緩沖區(qū),然后使用:b n跳的第n個緩沖區(qū)
- :bpre :bnext :bfirst :blast
- 或者用:b buffer_name加上tab補全來跳轉
#### Window窗口
窗口是可視化的分割區(qū)域
- 一個緩沖區(qū)可以分割成多個窗口,每個窗口也可以打開不同緩沖區(qū)
- <Ctrl+w>s水平分割,<Ctrl+w>v垂直分割?;蛘?sp和:vs
- 每個窗口可以繼續(xù)無限分割
|命令|用途|
|---|---|
|<Ctrl-w>w|在窗口鍵來回切換|
|h|切換到左邊窗口|
|j|切換到下邊窗口|
|k|切換到上邊窗口|
|l|切換到右邊窗口|
大寫時可以移動窗口
#### Tab(標簽頁)將窗口分組
Tab是可以容納一系列窗口的容器(:h tabpage)
- vim 的Tab和其他編輯器不太一樣,可以想象成Linux的虛擬桌面
- 比如一個Tab全用來編輯Python文件,一個Tab全是HTML文件
- 相比窗口,Tab一般用的比較少,Tab太多,管理起來也太麻煩
查看全部 -
## vim如何搜索替換
### vim替換命令
substitute命令允許我們查找并且替換掉文本,并且支持正則表達式
- `:[range]s[ubstiute]/{pattern}/{string}/[flags]`
- range表示范圍比如:10,20表示10-20行,%表示全部
- pattern要替換的模式,string是替換后的文本
#### 替換標志位
flags有幾個常用的標志
- g(global)表示全局范圍內執(zhí)行
- c(confirm)表示確認,可以確認或者拒絕
- n(number)報告匹配到的次數而不替換,可以用來查詢匹配次數
查看全部 -
## Vim快速增產改查
### Vim增加字符
- 進入插入模式
- 使用a/i/o進入插入模式
### Vim快速刪除
如何快速刪除一個字符或者單詞?
- Vim在Normal模式下使用x快速刪除一個字符
- 使用d(delete)配合文本對象快速刪除一個單詞daw(d around word),diw(刪除一行,不包括空白字符)
- dd刪除一行,`dt(`快速刪除括號里的內容
- d$快速刪除到行尾,d0快速刪除到行首
- d和x都可以搭配數字來執(zhí)行多次
- 使用v可以選擇刪除
### Vim快速修改
- 常用有三個,r(replace),c(change),s(substitute)
- Normal模式下使用r可以替換一個字符。s替換并進入插入模式
- R不斷替換,Esc退出,S刪除整行并進入插入模式
- 使用c配合文本對象,我們可以快速修改,cw刪除單詞插入,ct"刪除引號中的內容
### Vim查詢
- 使用/或者?進行前向或者反向搜索
- 使用n/N跳轉到下一個或上一個匹配
- 使用*或者#進行當前單詞的前向和后項匹配
查看全部 -
:imap <c-d> <Esc>ddi? 此映射可在插入模式下使用 ctrl+d 實現(xiàn)快速刪除
?
?
? ? ? ? ??
命令行對應映射 cnoremap?
<cr> 指代回車鍵,也可寫作<Enter>
let mapleader=","? ?inoremap <leader>w <Esc>:w<cr> 可以將<Leader> 鍵自定義映射為“,”,同時利用 <Leader> 來創(chuàng)建自定義映射項
查看全部 -
配置映射插件vim腳本
?:source ~/.vimrc 重新加載vimrc文件,使文件配置生效
查看全部
舉報