vim思想和技巧

這不是一篇vim命令的集合咧织,也不是一篇vim插件的推薦局装,是在什么插件都不裝的前提下看看運用vim的思想和技巧到底能解決什么,再去思索我需要裝什么插件來做到光靠原生vim做不到的事情

思想

一.點命令

? 1. 點命令可以重復(fù)上次修改凤薛,上一次修改可以是x座泳,dd等在普通模式下的命令,也可以是進入插入模式直至返回普通模式的一系列操作

二.不要自我重復(fù)

? 假如你要給當(dāng)前行以后的15行的末尾都添加分號

  • 方法一: 按A;<Esc>洒沦,然后按jA;<Esc>一直重復(fù)呢豹绪,或許可以達到效果,但是卻已經(jīng)陷入自我重復(fù)了申眼,就像寫很多相似的代碼的時候一樣需要思索一下了
  • 方法二:按A;<Esc>瞒津,然后按j.,前面第一點說了括尸,點命令可以重復(fù)上一次的修改巷蚪,這里的上一次修改就是A;<Esc>,所以按j.就可以實現(xiàn)我們想要的效果濒翻,這個操作也是理想的編輯模式屁柏,即一次按鍵移動j,另一次按鍵操作.

三.一次修改的粒度

  1. 我們很多時候需要撤銷我們輸入的內(nèi)容有送,會按u鍵來撤銷
  2. 假如我們這次插入模式輸入的已經(jīng)有十行了前联,也許你只想撤銷第十行的內(nèi)容,這時你按<Esc>u,你會發(fā)現(xiàn)十行全部被撤銷了娶眷,這就是一次修改的粒度過大了,這和vscode中的不一樣啸臀,每次<command-z>只會撤銷一行的內(nèi)容届宠,所以在vim中我們需要自己控制好上一次修改的粒度,每次思索代碼沒有輸入的時候可以按<Esc>退回到普通模式乘粒,可以實現(xiàn)修改粒度的切分

四.只要可能豌注,就用操作符命令,而不是可視模式

  1. import React, { FC, useMemo, useEffect } from 'react'比如你想刪除這里的第一個單詞import灯萍,方式一可以用daw實現(xiàn)轧铁,方式二用vawd。在其他編輯器的模式下我們通常會選擇方式二旦棉,即先選擇區(qū)域再做操作齿风,但是vim中可以先選擇操作再選擇范圍選擇方式一的好處就是可以使用.命令,可以繼續(xù)刪除下一個單詞绑洛,但是使用方式二的可視模式的話救斑,你會發(fā)現(xiàn)它只是每次都刪除7個字符,因為第一次的vawd 操作的是import加一個空格
小眾模式

一.操作符待決模式

  1. 你也許知道vim中有四種模式:普通模式真屯,插入模式脸候,可視模式,命令行模式,但還有操作符待決模式
  2. vim中有一條額外的規(guī)則运沦,當(dāng)一個操作符命令被連續(xù)調(diào)用兩次時泵额,它會作用于當(dāng)前行
  3. 什么是操作符待決模式,d是刪除的操作符携添,< 是減少縮進的操作符嫁盲,可是我們按dd才是刪除一行,<<才是減少縮進一行薪寓,其實我們在按下第一個d的時候進入了一個操作符待決模式亡资,只是這個模式是個短暫的存在,直到接收到我們下一個動作命令向叉,才完成整個操作锥腻,比如dd,第一個d是是操作符母谎,第二個d時說要刪除整行瘦黑,所以同理cc就是刪除整行并插入,yy就是復(fù)制整行奇唤,dap幸斥,就是刪除整個段落,gUap就是將整個段落大寫
  4. 可以將操作符和查找動作結(jié)合起來使用d/staff<cr>可以刪除從當(dāng)前光標(biāo)到staff前面的內(nèi)容
  5. 可以將操作符待決模式和文本對象結(jié)合起來咬扇,在操作符待決模式中甲葬,i 不再是切換到插入模式并將光標(biāo)置于字符前,a也不是將光標(biāo)置于字符后懈贺,而是當(dāng)作文本對象的組成部分经窖。因為aw會刪除當(dāng)前單詞加一個空格,iw只刪除當(dāng)前單詞的特性梭灿,c命令適合和iw等配合画侣,d命令則適合和aw等配合
  6. 很多命令都是兩個或更多按鍵,比如<C-w> s 會水平切分此窗口堡妒,但是<C-w>只是第二個按鍵的前綴配乱,可以當(dāng)作命名空間,但是他們并不會激活操作符待決模式皮迟,因為只有操作符才會激活操作符待決模式

二. 插入-普通模式

1.有時候會在插入模式的情況下想使用普通模式的命令搬泥,可以不需要按<Esc>, <C-o> 切換到插入-普通模式,當(dāng)在插入模式時万栅,想要運行一個普通模式命令佑钾,然后馬上繼續(xù)輸入的時候可以用這個命令。比如想滾動一下屏幕烦粒,讓當(dāng)前行顯示在窗口正中休溶,以更好地閱讀代赁,然后繼續(xù)插入,可以按<C-o>zz兽掰。再比如在當(dāng)前行操作完畢芭碍,想到下方10行的地方進行操作,可以按<C-o>10j

三. 選擇模式

1.可視模式下孽尽,當(dāng)選中一段文本后窖壕,再按<C-g>可以切換到選擇模式,再輸入任意可見字符杉女,如p瞻讽,這個選中的文本將會被刪除,并顯示你輸入的字符p熏挎,并切換到插入模式速勇,但是在可視模式下,會將這些字符當(dāng)作命令坎拐,p會被認為是粘貼

技巧

一.和shell進行切換

  1. <C-z>可以讓vim掛起烦磁,進入到shell中,fg可以從shell返回到vim

二.退出了插入模式在文檔中移動哼勇,然后又想快速回到退出的地方繼續(xù)編輯都伪,用gi命令

三.位置標(biāo)記

? 1. 可以在退出這次修改的時候用m{letter}設(shè)置一個標(biāo)記,這個{letter}需要是大寫积担,作為全局標(biāo)記陨晶,如果是小寫則是局部緩沖區(qū)的標(biāo)記,設(shè)置大寫字母的話下次再次打開vim的時候可以用``{letter}`快速的回到上次的文件帝璧,這是我用來回到前一天沒寫完的代碼的地方最快的方式

四.將下/上個查找所在的行居中

noremap <Leader>n nzz 
noremap <Leader>N Nzz

五.自動填充當(dāng)前文件所在的目錄地址

  1. cnoremap <expr> %% getcmdtype( ) == ':' ? expand('%:h').'/' : '%%'把這個加入到vimrc中可以用%%就能自動填充當(dāng)前文件所在的目錄地址

  2. cnoremap表示在命令行模式下進行映射

  3. <expr>表示將映射命令的右邊參數(shù)當(dāng)作一個表達式來對待

  4. 當(dāng)我們輸入%% 將會得到表達式getcmdtype( ) == ':' ? expand('%:h').'/' : '%%'運算的結(jié)果

  5. 這個表達式通過getcmdtype()獲取當(dāng)前命令行模式的類型珍逸,:表示是命令行模式,expand()函數(shù)對通配符進行擴展聋溜,其中傳入的參數(shù)為%:h,即獲取當(dāng)前緩沖區(qū)的地址并去掉文件名

  6. 這個映射本身就是在命令行模式下的映射叭爱,不需要getcmdtype() 再去判斷是不是命令行模式撮躁,所以親測如下命令也可以生效,cnoremap <expr> %% expand('%:h').'/'

六.命令行搜索歷史命令

  1. 可以讓手指不離開本位行(hjkl所在的行)买雾,但是同樣可以根據(jù)已輸入的字符當(dāng)作過濾條件查找已輸入過的命令把曼,<Up>會篩選,<C-p>不會漓穿,如輸入set high會根據(jù)已經(jīng)輸入的進行篩選
cnoremap <C-p> <Up>
cnoremap <C-n> <Down>

七.取消上下左右鍵的作用嗤军,強迫自己不使用上下左右鍵

noremap <Up> <Nop>
noremap <Down> <Nop>
noremap <Left> <Nop>
noremap <Right> <Nop>

八.實際行和屏幕行

  1. 當(dāng)開啟很多分屏后,會出現(xiàn)實際行和屏幕行晃危,即文件中的一行會被顯示為屏幕上的若干行
  2. jk會根據(jù)實際行向下或向上移動叙赚,而gjgk則是按屏幕行向下或向上移
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末老客,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子震叮,更是在濱河造成了極大的恐慌胧砰,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苇瓣,死亡現(xiàn)場離奇詭異尉间,居然都是意外死亡,警方通過查閱死者的電腦和手機击罪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門哲嘲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人媳禁,你說我怎么就攤上這事眠副。” “怎么了损话?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵侦啸,是天一觀的道長。 經(jīng)常有香客問我丧枪,道長光涂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任拧烦,我火速辦了婚禮忘闻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恋博。我一直安慰自己齐佳,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布债沮。 她就那樣靜靜地躺著炼吴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疫衩。 梳的紋絲不亂的頭發(fā)上硅蹦,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音闷煤,去河邊找鬼童芹。 笑死,一個胖子當(dāng)著我的面吹牛鲤拿,可吹牛的內(nèi)容都是我干的假褪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼近顷,長吁一口氣:“原來是場噩夢啊……” “哼生音!你這毒婦竟也來了宁否?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤久锥,失蹤者是張志新(化名)和其女友劉穎家淤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瑟由,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡絮重,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了歹苦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片青伤。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖殴瘦,靈堂內(nèi)的尸體忽然破棺而出狠角,到底是詐尸還是另有隱情,我是刑警寧澤蚪腋,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布丰歌,位于F島的核電站,受9級特大地震影響屉凯,放射性物質(zhì)發(fā)生泄漏立帖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一悠砚、第九天 我趴在偏房一處隱蔽的房頂上張望晓勇。 院中可真熱鬧,春花似錦灌旧、人聲如沸绑咱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽描融。三九已至,卻和暖如春衡蚂,著一層夾襖步出監(jiān)牢的瞬間稼稿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工讳窟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人敞恋。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓丽啡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親硬猫。 傳聞我的和親對象是個殘疾皇子补箍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,370評論 0 5
  • dpkg 學(xué)習(xí) 安裝mysql apt-get install mysql-server-5.6 apt-get ...
    sharonji閱讀 433評論 0 0
  • Vim幾句話介紹Vim是Unix系統(tǒng)上的文本編輯軟件(你該不會不知道什么是文本編輯軟件吧8闹础),在windows上也...
    何必遠方閱讀 3,130評論 0 3
  • 自我總結(jié)篇: 對文件的操作技巧: vim文件一個有三種狀態(tài):命令(瀏覽/輸入命令轉(zhuǎn)變末行模式)坑雅,文本(添加/編輯/...
    小知大知閱讀 793評論 0 0
  • vim 選擇文本辈挂,刪除,復(fù)制裹粤,粘貼 文本的選擇终蒂,對于編輯器來說,是很基本的東西遥诉,也經(jīng)常被用到拇泣,總結(jié)如下: v 從...
    壹首簡單的歌閱讀 881評論 0 7