成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

ConardLi / 2985人閱讀

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

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

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

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

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

g 如果缺乏該選項,只會替換第一個。一般我們所說的替換是全部替換,即加了g選項的替換。

i 忽略大小寫

e 忽略錯誤

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

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

實話實說,使用命令來替換有違于(大多數(shù))程序員的習(xí)慣。一般提起“替換”,第一感覺都是按下某個快捷鍵,然后在某個窗口中輸入“查找內(nèi)容”,再輸入“替換內(nèi)容”,按確定??壳妹顏硖鎿Q,總會讓人想起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

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

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

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

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

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

回顧替換命令:

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

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

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

vnoremap s :s///gc

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

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

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

s發(fā)動映射。

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

什么?你說你用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條:用好組合技

很多情況下,替換操作涉及多個文件。由于缺乏項目管理的功能,編輯器在這方面自然比不上IDE。不過Vim還是支持對多個文件執(zhí)行替換操作,雖說有點兒粗糙。Vim提供了名為argdo的機(jī)制,可以在多個文件上執(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)一步,實現(xiàn)全項目內(nèi)的替換。假設(shè)你的項目用git作版本管理,那么通過git ls-files可以獲取全部文件名。然后用grep -l pattern $(git ls-files)可以篩選出含有pattern的文件。接下來就是把這份文件列表傳遞給args:

" 查找整個項目中含有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://m.hztianpu.com/yun/24853.html

相關(guān)文章

  • Vim哲學(xué)(一)

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

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

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

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

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

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

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

    187J3X1 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<