以思維的速度編輯文本-快捷鍵&Vim

一、命令行文本操作快捷鍵

1. Mac文本操作通用快捷鍵

Ctrl + A 跳至行首
Ctrl + E 跳至行尾
Ctrl + F 前進(jìn)一個(gè)字符
Ctrl + B 后退一個(gè)字符
Ctrl + H 回刪一個(gè)字符
Ctrl + D 刪除當(dāng)前字符
Ctrl + K 刪除至行尾

2. iterm專用Ctrl系列快捷鍵

Ctrl + W 回刪一個(gè)單詞
Ctrl + Q 清空當(dāng)前行,等待下條命令運(yùn)行完畢,自動(dòng)將剛才清空的命令顯示出來
Ctrl + U 剪切一行
Ctrl + Y 粘貼一行
Ctrl + C/G 保留當(dāng)前命令,新建一行
Ctrl + S 后向命令搜索
Ctrl + R 前向命令搜索
Ctrl + L 清屏
Ctrl + P 上翻歷史命令
Ctrl + N 下翻歷史命令

Ctrl + x + e 進(jìn)入vim編輯當(dāng)前命令

3. iterm專用Option系列快捷鍵

需要設(shè)置iterm的profile,將Option鍵設(shè)置為Esc

Option + F前進(jìn)一個(gè)單詞
Option + B后退一個(gè)單詞
Option + D刪除一個(gè)單詞
Option + W刪除到行首
Option + . 自動(dòng)補(bǔ)全上一條命令的最后一個(gè)參數(shù)

4. 其他Tips

  • d 顯示歷史跳轉(zhuǎn)目錄,然后按相應(yīng)數(shù)字鍵進(jìn)行跳轉(zhuǎn)目錄
?  index git:(master) d
0   ~/work/index
1   ~/work/casa-listing-service
2   /usr/local/etc/nginx
  • r {target}={replace} 重復(fù)上條命令 并替換掉上條命令部分字符;參數(shù)為空時(shí),重復(fù)執(zhí)行上條命令
?  ~ echo casa
casa
?  ~ r casa=myfun
echo myfun
myfun
  • ack 文件內(nèi)容快速搜索
  • cmd+\ 顯示光標(biāo)位置

二、Vim入坑指南

image

主流編輯器的學(xué)習(xí)曲線圖

一旦你意識(shí)到Vim的強(qiáng)大,你就踏上了不停發(fā)掘它們潛力的漫漫長路。你不停地改進(jìn)自己的配置文件,你不停地搜索更好的插件,甚至有一天你開始動(dòng)手寫自己的插件。就像劍客保養(yǎng)自己的劍一樣,你也甘心花時(shí)間提升你的Vim。經(jīng)年累月,不知不覺,你已經(jīng)在那把劍上傾注了你的靈魂。

用Vim就像吸食毒品,慢慢地就會(huì)上癮。它會(huì)帶給你漸漸強(qiáng)烈的快感,但你也向它獻(xiàn)出了自己的靈魂。這時(shí),你只能稱它為神器。

Real Vim ninjas count every keystroke.

vimgolf put 576c778ea4896a561b01b4f2

1. 更好的操作習(xí)慣

  • ZZ == :x == :wq
  • Ctrl + [ == ESC
  • hjkl ==(←↓↑→)
  • . : 重復(fù)執(zhí)行上次的修改
  • u : undo
  • Ctrl + r : redo

2. 普通(normal)模式

(1)移動(dòng)(Motion)

普通移動(dòng):

hjkl :←↓↑→
+ : 跳轉(zhuǎn)至下一行非空行首
- : 跳轉(zhuǎn)至上一行非空行首
^ :跳轉(zhuǎn)至當(dāng)前行非空行首
0 : 跳轉(zhuǎn)至行首
$ : 跳轉(zhuǎn)至行尾
e : 跳轉(zhuǎn)至單詞尾部
ge : 反向跳轉(zhuǎn)至單詞尾部
w : 正向跳轉(zhuǎn)至單詞頭部
b : 反向跳轉(zhuǎn)至單詞頭部
}/): 正向跳轉(zhuǎn)至段落尾部(有差別)
{/(: 反向跳轉(zhuǎn)至段落尾部(有差別)
gg : 跳轉(zhuǎn)至首行
G : 跳轉(zhuǎn)至尾行
M : 跳轉(zhuǎn)中間行
% : 在開閉標(biāo)簽內(nèi)跳轉(zhuǎn)() {} [] <>

行級(jí)查找移動(dòng):

f{char} : 將光標(biāo)正向移動(dòng)到{char}上
F{char} : 將光標(biāo)反向移動(dòng)到{char}上
t{char} : 將光標(biāo)正向移動(dòng)到{char}前
t{char} : 將光標(biāo)反向移動(dòng)到{char}后
; : 重復(fù)上次移動(dòng)
, : 回退上次移動(dòng)

全文查找移動(dòng):

/{target} : 查找文本
n : 正向跳轉(zhuǎn)
N : 反向跳轉(zhuǎn)
* : 查找光標(biāo)所在單詞的下一處

標(biāo)簽移動(dòng)

m{a-zA-Z} : mark標(biāo)記   
`{標(biāo)記符} : 跳轉(zhuǎn)至相應(yīng)標(biāo)記
默認(rèn)標(biāo)記:
`` : 跳轉(zhuǎn)之前的位置(Ctrl + o)
`. : 上次修改的地方
`^ : 上次插入的地方
`[ : 上次修改或復(fù)制的起始位置
`[ : 上次修改或復(fù)制的結(jié)束位置
`< : 上次高亮選區(qū)的起始位置
`> : 上次高亮選區(qū)的結(jié)束位置

(2)文本操作(Action)

使能文本操作(Do-Action):

d : delete 
y : yank/copy
c : change

即時(shí)文本操作(Instant-Action):

前:光標(biāo)前;后:光標(biāo)后

p : (后)put/paste
P : (前)put/paste
x : (后)刪除字符
X : (前)刪除字符
s : 刪除字符并進(jìn)入插入模式
S : 刪除當(dāng)前行并進(jìn)入插入模式
r : 替換當(dāng)前字符
R : 連續(xù)替換輸入字符
Y=yy : 復(fù)制當(dāng)前行
dd : 刪除當(dāng)前行
D=d$ : 刪除至行尾
C=c$ : 修改至行尾
o : 在當(dāng)前行下插入一行
O : 在當(dāng)前行上插入一行
J : join將下一行與當(dāng)前行連起來
. : 重復(fù)上傳修改

(3)文本對(duì)象(Object)

分隔符文本對(duì)象
(
{
[
<
"
'
`
t(tag標(biāo)簽)
范圍文本對(duì)象
w : word
W : String
s : sentence
p : paragraph
文本對(duì)象范圍(Range)
i : inside
a : around

(4) 普通模式命令語法

  1. {n}{Instant-Action}

5dd : 刪除五行
5p : 將寄存器的內(nèi)容在光標(biāo)后粘貼5遍
5x : 正向刪除5個(gè)字符

  1. {n}{Do-Action}{Motion} or {Do-Action}{n}{Motion}

2dl(d2l) : 正向刪除2個(gè)字符
2cw(c2w) : 正向刪除兩個(gè)單詞并進(jìn)入插入模式

  1. {n}{Do-Action}{Range}{Object} or {Do-Action}{n}{Range}{Object}

3daw(d3aw) : 正向刪除三個(gè)單詞(包括單詞后面的空格)
ciw(ciw) : 正向刪除一個(gè)單詞(不包括空格)并進(jìn)入插入模式

3. 可視(Visual)模式

可視模式命令(Vcmd):

  • v :激活或者關(guān)閉面向==字符==的可視模式
  • V :激活或者關(guān)閉面向==行塊==的可視模式
  • Ctrl + v :激活或者關(guān)閉面向==列塊==的可視模式
  • gv :重選上次選擇區(qū)域
  • o :切換高亮區(qū)域選擇端

慣用用法

  • {Vcmd}{n}{Motion}{Action}
v3jd: 向下選中3行刪除
v3lp: 向右選擇3個(gè)字符剪切掉,然后將寄存器的值粘貼
  • {Vcmd}{n}{Range}{Object}{Action}
v2iwd :正向選擇兩個(gè)單詞刪除

建議:盡可能使用普通模式命令操作文本,除非迫不得已。

4.插入(Insert)模式

(1) 普通模式切入插入模式

i : (前)insert
I : 在行首插入
a : (后)append
A : 在行尾插入

(2) 文本操作快捷方式

Ctrl + h : 回刪一個(gè)字符
Ctrl + w : 回刪一個(gè)單詞
Ctrl + u : 回刪至行首
Ctrl + r + " : 快速將默認(rèn)寄存器中的值粘貼

(3) 快速切換普通模式

Ctrl + [ : Esc
Ctrl + o : 從插入模式切換到普通模式,執(zhí)行一條命令后自動(dòng)切換回插入模式

5.寄存器

"{Register} : 引用寄存器

"ayy // 將當(dāng)前行復(fù)制到a寄存器中
"ap // 普通模式下將a寄存器的內(nèi)容粘貼出來
Ctrl + r + a // 插入模式下將a寄存器的內(nèi)容粘貼出來

常用寄存器

  • "" : 默認(rèn)寄存器,執(zhí)行任何{Action}都是對(duì)該寄存器操作
  • "0 : 復(fù)制專用寄存器,執(zhí)行y命令后,會(huì)同時(shí)將文本存儲(chǔ)在""和"0中,其他操作則只會(huì)存儲(chǔ)在""
  • "{1-9} : 壓棧寄存器:每執(zhí)行一次==刪除/修改Action==后會(huì)將""中的內(nèi)容壓入其中
  • "{a-z} : 有名寄存器
  • "_ : 黑洞寄存器
  • "*/+ : 系統(tǒng)剪切板寄存器
  • “= : 表達(dá)式寄存器

6.命令(Command)模式

命令行模式是VIM繼承自老祖先ed ex的遺產(chǎn),有著相當(dāng)強(qiáng)大的功能。
普通模式適合近距離作戰(zhàn),命令模式適合遠(yuǎn)距離作戰(zhàn)。

:1,5t$ //將第一行到第五行拷貝到最后一行 

(1)行[line]

n : 絕對(duì)行  
. : 當(dāng)前行  
.+(-)n : 當(dāng)前行向下(上)偏移n行  
$ : 最后一行  
% : 所有行  
‘< : 高亮區(qū)域起始行  
‘> : 高亮區(qū)域結(jié)束行  

(2)范圍[Range]

[StartLine,EndLine]

可以進(jìn)入視圖模式選中行,然后進(jìn)入命令模式,會(huì)默認(rèn)選中其高亮部分

(3)操作命令

: [range] delete/d [x] 將選定區(qū)間的行刪除 并寄存到x中
: [range] yank/y [x] 將選定區(qū)間的行復(fù)制 并寄存到x中
: [line] put [x] 將選定寄存器x中數(shù)據(jù)粘貼到指定行下
: [range] join /j 將選定行連接
: [range] t [line] 將選定區(qū)間行的內(nèi)容復(fù)制到指定地址
: [range] move/m [line] 將選定區(qū)間行的內(nèi)容移動(dòng)到指定地址
: [range]s/target/repalce 替換指定行內(nèi)的target到replace
: [range]normal[NormalCmd] 在指定行內(nèi)執(zhí)行普通模式的命令

可以用"|"來連接多條命令,一起執(zhí)行

:1m$|$-1m0 // 將第一行和尾行互換

7.宏

宏用于對(duì)一系列相似的行、段落、文件進(jìn)行重復(fù)性的修改。
宏可以把任意數(shù)目的按鍵操作錄制到寄存器,用于之后的回放。

宏命令

qa //將宏錄制到a寄存器中
q // 結(jié)束本次宏的錄制
:reg a // 查看宏的內(nèi)容
{n}@a // 串行的將a寄存器中的宏執(zhí)行n遍
:[range]normal @a//并行的將宏在選擇的文本上執(zhí)行
qA // 可以給宏追加命令

8 推薦資源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 曾經(jīng)在思科的工廠測(cè)試系統(tǒng)`KlemTest` (`SUSE`命令行模式)中使用`VI`/`VIM`超過2年半,現(xiàn)在...
    戈多在地獄閱讀 1,982評(píng)論 1 13
  • 命令歷史 以:和/開頭的命令都有歷史紀(jì)錄,可以首先鍵入:或/然后按上下箭頭來選擇某個(gè)歷史命令。 啟動(dòng)vim 在命令...
    im螞蟻閱讀 31,055評(píng)論 3 48
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢(mèng)閱讀 100,630評(píng)論 9 468
  • 2017.8.17(170—120)《36》 今天聽一土豪聊起他的家事,他的大兒子生了兩個(gè)孫子,他非常高興,...
    方正省閱讀 219評(píng)論 0 1
  • 最近總是覺得家人對(duì)我不好,對(duì)我關(guān)心不夠,而且還總是挑我的毛病,心情壓抑,不愿意和他們呆在一起,就算在一起也不愿說話...
    Dires蕾蕾閱讀 173評(píng)論 0 0

友情鏈接更多精彩內(nèi)容