3

次のような長い単語があります。

foo,foo bar,bar@foo,foo# bar,bar$ foo#

今、私はそれを次のように変えたいと思います:

"foo","foo bar","bar@foo","foo# bar","bar$ foo#"

したがって、区切り文字はコンマです。でこれを行う最良の方法は何vi(m)ですか?

編集:誰かが反対票について詳しく説明したいと思いますか?

4

4 に答える 4

1

vim で単純なことを行う最も簡単な方法は、マクロを使用することです。関数の定義方法を学んだり、検索と置換のパターンを見つけたりするよりも短い時間で済みます。

コマンド モードで、
カーソルを行の先頭に移動します0
マクロをマクロ a として記録を開始qa
します 引用符を挿入しますi"
コロンまたは行末に移動し/.,\|$ <Enter>
ます 引用符を追加しますa"
次のセルの先頭に移動しll
ます マクロの記録を停止しますq

これで、最初のセルが変換され、マクロが記録されました。別のセルを変換するには@a(または@@、最後に使用したマクロを実行することを意味します)。行の終わりに到達したら、次の行の先頭に移動します。

于 2013-06-10T17:41:20.057 に答える
0

試す:

for l in range( 1, line('$') ) | 
  call append( line('.') - 1, join( map( split( getline('.'), ',' ), '"\"" . v:val . "\""' ), ',' ) ) | 
  delete | 
endfor

説明:

コンマで行を分割するたびに、map関数を使用して先頭と末尾の二重引用符を追加し、それらをコンマで結合して現在の行の上に追加し、現在のカーソル行を削除します。これが古い行になります。

于 2013-06-10T17:09:15.020 に答える
0

文字列の最初と最後は別として、s/,/","/gそうします。したがって、すべては、その仕事を 1 回で完了するための簡単なハックを探しているのか、それとも何度も繰り返さなければならない仕事であると予想しているのかにかかっていると思います。

于 2013-06-11T14:13:30.467 に答える