成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Vim替換小技巧(兼淺談Vim哲學(xué))

ConardLi / 2915人閱讀

摘要:本文將以此為起點(diǎn),介紹一些替換小技巧。實(shí)話實(shí)說,使用命令來替換有違于大多數(shù)程序員的習(xí)慣。接下更進(jìn)一步,教多幾個(gè)小技巧。這么一來,替換將僅在當(dāng)前大括號(hào)內(nèi)生效。在替換局部變量時(shí),比起全局替換,這樣的替換方式無疑會(huì)更高效。

想必用過Vim的人都知道,在Vim里面,以下命令可以替換當(dāng)前文件的內(nèi)容:

:[range]s/{要被替換的模式}/{替換的內(nèi)容}/[flags]

其中range指定替換命令生效的范圍。flags指定替換的一些選項(xiàng),常用的有:

c 替換前進(jìn)行確認(rèn)

g 如果缺乏該選項(xiàng),只會(huì)替換第一個(gè)。一般我們所說的替換是全部替換,即加了g選項(xiàng)的替換。

i 忽略大小寫

e 忽略錯(cuò)誤

具體細(xì)節(jié)請:vert help substitude查看。

本文將以此為起點(diǎn),介紹一些替換小技巧。寫這篇文章,主要是分享個(gè)人的一些腦洞心得,順便向接觸過Vim的人安利下Vim的一些哲學(xué)。

實(shí)話實(shí)說,使用命令來替換有違于(大多數(shù))程序員的習(xí)慣。一般提起“替換”,第一感覺都是按下某個(gè)快捷鍵,然后在某個(gè)窗口中輸入“查找內(nèi)容”,再輸入“替換內(nèi)容”,按確定??壳妹顏硖鎿Q,總會(huì)讓人想起sed這樣的老東西,想起它那咒文一樣的指令(如果還想得起來的話)。

還好,Vim的映射機(jī)制讓想起這一切不再困難。你僅需映射一份模板:

" 把下面映射添加到vimrc中
" 設(shè)置替換命令的模板
nnoremap s :%s///gc
" :vert help c_
" Ctrl-r " 插入最近一次復(fù)制/刪除的文本
nnoremap sl :%s/"/"/gc
" Ctrl-r Ctrl-w 插入當(dāng)前光標(biāo)下的詞。
nnoremap sc :%s/<>//gc

這樣就不用記住完整的替換命令了,僅需填兩個(gè)空。是不是又回到了熟悉的“查找內(nèi)容”/“替換內(nèi)容”模式呢?

Vim哲學(xué)第N條:用映射消除重復(fù)的勞動(dòng)。

一般在文本編輯的過程中,常常會(huì)有重復(fù)某幾個(gè)步驟的情況。一個(gè)合格的Vimer應(yīng)該學(xué)會(huì)用映射或其他機(jī)制來減少無益的操作。所謂時(shí)間就是生命,珍愛生命,從靈活使用映射開始。

" :vert help map 查看如何在Vim中使用映射
" :vert help recording 查看如何在Vim中使用錄制

看了剛才的內(nèi)容,應(yīng)該不會(huì)對Vim里面的替換操作感到陌生了。接下更進(jìn)一步,教多幾個(gè)小技巧。

回顧替換命令:

:[range]s/{要被替換的模式}/{替換的內(nèi)容}/[flags]

最前面的range也是有些門道的。range是Vim中的一個(gè)概念,表示文本的某個(gè)范圍。常用的range有兩種:一種是m,n,表示從第m行到第n行,其中.表示當(dāng)前行,而$表示最未行;另一種是%,表示整個(gè)文件,等價(jià)于1,$。更多的形式請查看:vert help range。

憑借這一點(diǎn),我們可以實(shí)現(xiàn)指定替換的范圍,減輕確認(rèn)時(shí)的工作量。下面介紹個(gè)例子:

vnoremap s :s///gc

這個(gè)跟前面的normal模式下的設(shè)置模板的映射很像,不過有兩點(diǎn)不同。一點(diǎn)是,這是作用在visual模式下的映射;另一點(diǎn)是,這個(gè)模板里沒有指定范圍。在visual模式下使用命令,默認(rèn)范圍是當(dāng)前選中的范圍。(參見:vert help v_:

于是乎,我們可以這樣使用:

vi{選中當(dāng)前大括號(hào)(代碼塊)里面的內(nèi)容。

s發(fā)動(dòng)映射。

這么一來,替換將僅在當(dāng)前大括號(hào)內(nèi)生效。在替換局部變量時(shí),比起全局替換,這樣的替換方式無疑會(huì)更高效。

什么?你說你用Python?嗯,你可以考慮下借助第三方插件來選中代碼塊:

https://github.com/michaeljsmith/vim-indent-object

https://github.com/nelstrom/vim-textobj-rubyblock

https://github.com/kana/vim-textobj-user

Vim哲學(xué)第N+1條:用好組合技

很多情況下,替換操作涉及多個(gè)文件。由于缺乏項(xiàng)目管理的功能,編輯器在這方面自然比不上IDE。不過Vim還是支持對多個(gè)文件執(zhí)行替換操作,雖說有點(diǎn)兒粗糙。Vim提供了名為argdo的機(jī)制,可以在多個(gè)文件上執(zhí)行同樣的命令。

" 在dataType.cpp和dataType.h中替換filename為fn
:args dataType.cpp dataType.h
" :vert help argdo
:argdo %s/filename/fn/gce | update

args命令接收文件列表,而argdo命令接收要執(zhí)行命令,update則寫入更新了的文件內(nèi)容。(注意這里的|是用來連接%s/filename/fn/gcupdate成單一的參數(shù),不是管道符)

關(guān)于args的更多內(nèi)容,參見這篇文章:http://vimcasts.org/episodes/populating-the-arglist/

我們可以更進(jìn)一步,實(shí)現(xiàn)全項(xiàng)目內(nèi)的替換。假設(shè)你的項(xiàng)目用git作版本管理,那么通過git ls-files可以獲取全部文件名。然后用grep -l pattern $(git ls-files)可以篩選出含有pattern的文件。接下來就是把這份文件列表傳遞給args:

" 查找整個(gè)項(xiàng)目中含有filename的文件,并作為參數(shù)傳遞給args
:args `grep -l filename $(git ls-files)`
:argdo %s/filename/fn/gce | update

就是這樣。

Vim哲學(xué)第N+2條:善用外部命令來拓展Vim的能力

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24853.html

相關(guān)文章

  • Vim哲學(xué)(一)

    摘要:之所以能卓爾不群靠地就是一種自成一派且精悍有效的編輯器哲學(xué)當(dāng)然也是,就好像網(wǎng)游千千萬卻唯有一覽眾山小,那靠地不是技巧與外在,而是與眾不同的世界觀。征服其實(shí)是一種領(lǐng)悟,我融入了的哲學(xué)而已。這也是好東西,它比上一個(gè)更貼近的哲學(xué)。 就在幾個(gè)小時(shí)以前,我回答了一個(gè)關(guān)于推薦開發(fā)工具的問題,很多朋友表示喜歡和鼓勵(lì),非常感謝!我也很想多寫一些細(xì)節(jié),于是便起意開一個(gè)系列來聊聊我多次提到的 Vim。 ...

    honhon 評論0 收藏0
  • Vim哲學(xué)(二)

    摘要:為什么要有模式呢以上其實(shí)已經(jīng)講述了一些原因,但真正的價(jià)值還在于接下來要講到的哲學(xué)。鼠標(biāo)與快捷鍵的操作治標(biāo)不治本,它們沒能從根本上解決這個(gè)問題。 學(xué)會(huì)用不同的角度去看待和理解這個(gè)世界,你收獲的永遠(yuǎn)會(huì)比你想象的更多。 上回我分享了如何掌握基礎(chǔ)移動(dòng)的心得體會(huì),而對于很重要的模式卻只是一帶而過,這其實(shí)是有原因的。過去我有過幾次教新手 Vim 的經(jīng)歷,按照慣常的方式先告訴他們模式切換,...

    ashe 評論0 收藏0
  • Vim哲學(xué)(四)

    摘要:的哲學(xué)第四篇姍姍來遲,狗血的原因我就不多說了,好消息是我將為這個(gè)系列帶來一些動(dòng)態(tài)演示。所以目前為止你學(xué)會(huì)上述四個(gè)動(dòng)作指令就足夠了。以詞為單位使得我們可以更精確也是更具語義化的移動(dòng)光標(biāo),并且要比逐個(gè)字符的移動(dòng)要快得多。 Vim 的哲學(xué)第四篇姍姍來遲,狗血的原因我就不多說了,好消息是我將為這個(gè)系列帶來一些動(dòng)態(tài)演示。原本我打算錄視頻的,但是文章都寫了那么些篇了,現(xiàn)在再錄視頻似乎晚了些,所以我...

    xiao7cn 評論0 收藏0
  • vim編輯器技巧備忘(初級(jí)-中級(jí))

    摘要:相反,不顯示行號(hào)設(shè)置為粘貼模式,解決粘貼時(shí)縮進(jìn)錯(cuò)亂問題。會(huì)自動(dòng)加入創(chuàng)建從當(dāng)前行起至以下行的折疊標(biāo)記,進(jìn)行折疊。中的標(biāo)記都有一個(gè)名字,這個(gè)名字用單一的字符表示。 學(xué)習(xí)vim并且其會(huì)成為你最后一個(gè)使用的文本編輯器 學(xué)習(xí)建議: 丟棄鼠標(biāo)和小鍵盤 具有搭配使用各種按鍵的意識(shí) 首先來一張 mindmap : showImg(http://sean-images.qiniudn.com/V...

    187J3X1 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<