2015-07-20 47 views
3

在vim中我有這樣一行文字之間:Vim的 - 將一些每一個字母

abcdef 

現在我想添加下劃線或之間其他這是每一個字母,所以這將是結果:

a_b_c_d_e_f 

我知道這樣做沃爾德的唯一方法是記錄這樣一個宏:

qqa_<esc>[email protected] 

有沒有更好,更簡單的方法來做到這一點?

回答

1

下面是一個快速和一個更加互動的方式來做到這一點,都在正常模式。

隨着光標在該行的開頭,按:

  1. i_<Esc>x插入和刪除的分隔符。 (我們這樣做的副作用。)
  2. gp把分離器回來。
  3. .,堅持下來,直到工作完成。

不幸的是,我們不能在這裏使用.的計數,因爲它只會在現場粘貼分隔符'計數'次。

+0

像這樣的事情正是我一直在尋找的! –

2

:%s/\(\p\)\p\@=/\1_/g

  • :開始的命令。
  • %搜索整個文檔。
  • \(\p\)將匹配並捕獲可打印的符號。例如,如果您只想匹配字符,則可以將\p替換爲\w
  • \p\@=執行了一個超前檢查以確保匹配的(第一個)\p後跟另一個\p。第二個,即\p\@=不構成比賽的一部分。這個很重要。
  • 在替換部分中,\1填寫匹配的(第一個)\p值,而_是文字。
  • 最後一個標誌,g是標準做的全部是標誌。
2

使用正向前查找和替代:

:%s/\(.\(.\)\@=\)/\1_/g 

這將匹配任何字符後跟任意字符,除了line break

3

如果你只想字母之間添加_,你可以做這樣的:

:%s/\a\zs\ze\a/_/g 

與其他一些圖案更換\a如果你想比ASCII字母多。

要理解這應該如何工作::help \a,:help \zs,:help \ze

+0

這很酷,我學到了一些新東西,謝謝! –

相關問題