0

vi-editorで9列のテキストを開いていますが、9列目(最後の列)のタブ文字をコンマとそれに続くスペースに置き換えたいと思います。これまでのところ、私はこれを思いついた。

'2,$s#\(^.\{8\}\)\\t#\1\(\,\)#'

しかし、それは何にも一致しないようです...何かをエスケープしすぎた可能性がありますが、列の区切り文字(この場合はタブ)を指定する必要があるかどうかもわかりません。これに関する助けをいただければ幸いです。

4

2 に答える 2

1
%s/^\(\%(\t\?[^\t]\+\)\{8\}\)\t\(.*\)$/\1, \2/

これは()を置き換えますs

  • ^-行の開始
  • \((グループ1)の開始
    • \%(内側のグループの開始
      • \t?0以上(行の先頭にTabaがないことを説明するため)Tab
      • [^\t]\+続いて1鉱石以上Tabの非
    • \)内側のグループの終わり
    • \{8\}上記の内側のグループは8回繰り返されました
  • \)(グループ1)の終わり
  • \t続いてTab
  • \(.*\)およびその他(グループ2)
  • $行の終わりまで

と:

  • \1- (グループ1)(8日までのすべてTab
  • -コンマとスペース
  • \2- (グループ2)Tab (8日から行末までのすべて)

バッファ全体で(%)。

于 2012-11-04T10:24:32.863 に答える
0

これが1回限りの置換の場合は、代わりにマクロを使用できます(変更する最初の行の最初の文字から開始します)。

qqfTab7;cl,SpaceEscj0q

キーを押す場所は次のとおりです。

  • qq–レジスターqへのマクロの記録を開始します
  • fTab–最初のタブ文字を検索します(つまり、1列目と2列目の間)
  • 7;–この検索を7回繰り返します(つまり、8列目と9列目の間のタブ文字)
  • cl,SpaceEsc–タブ文字をコンマとスペースに変更します
  • j–1行下がる
  • 0–この行の先頭に移動します
  • q–マクロの記録を停止します

次に、を使用@qして次の行で再生します(または99@q、次の99行で再生するなど)。

于 2012-11-04T11:46:37.680 に答える