2015-12-03 12 views
9

はこのように私は(例えばPythonスクリプト)ファイル内の文字列のリストを持っていると仮定包むときGQがオープン引用符を無視します:私はこのテキストの視覚的な選択をした場合VIM:テキスト

my_list_of_numbers = ["one two", 
    "three four", 
    "five six", 
    "seven eight", 
    "nine ten", 
    "eleven twelve"] 

、私は取得するには、テキストをラップするgqを使用することができます。

my_list_of_numbers = ["one two", "three four", "five six", "seven eight", "nine 
    ten", "eleven twelve"] 

しかし、要素"nine ten"は現在2行に半分に分割されます。

オープンクォート内に改行文字を入力しないでテキストを折り返すにはどうすればよいですか?私の望ましい結果は次のようになります。

my_list_of_numbers = ["one two", "three four", "five six", "seven eight", 
    "nine ten", "eleven twelve"] 
+6

テキストをブロックし、キーを打ちます。あなたはそうするためにそれを与える必要があります。 ':help fp'(外部フォーマッタ)と':help fex'(vimscriptフォーマッタ)を参照してください。 – Amadan

+1

'gq'を使用してもあなたの例ではインデントされていないようですね。ちなみに、あなたが望む結果を得たいなら、最初の行にカーソルを置いてみてください.'4JjJ' –

+0

@ lord63.jあなたの貢献に感謝します。 ':filetype plugin on'、 ':filetype indent on'、':set ft = python'を 'gq'でインデントします。 '4JjJ'は確かに仕事をしていますが、私の頭の中でどのくらいの行で行を80文字にする必要があります。 – christoph

答えて

1

私はこれを行うには、予約コマンドがあると思いませんでしたが、我々は でそれを行うことができますが、1行にして、正規表現でそれを作る、それを破りますあなたの希望する願い。

%s/\(.\{-}".\{-}".\{-}".\{-}".\{-}".\{-}".\{-}\)"/\1\r"/gec 

すべてをキーにマップするだけです。あなたを簡単にするために。

+0

残念ながら努力してくれてありがとうが、これは私が欲しいものを正確にしていない。引用符内のテキストが短い場合は、各行にもっと多くの「単語」が必要です。長ければ、それほど必要ではありませんが、これは各行に3つを入れます。 – christoph

0

このスクリプトをファイルに保存し、vimに読み込んでください。

vnoremap a d:call Replace(@")<CR> 


function! Replace(arg1, ...) 
      let Var = Myfun(a:arg1) 
       call append(line('.') - 1, [Var]) 
       silent! %s/@@[email protected]@/ /g 
       silent! %s/@[email protected]/\r/g 
endfunc                  

function! Myfun(s) 
      let Var = a:s 
       let Var = substitute(Var, '\n', '@@[email protected]@', 'g') 
       let Var = substitute(Var, '\s\s*', ' ', 'g') 
       let Varlength = strlen(substitute(Var, '\(.\{-}\".\{-}\"\,.\{-}\".\{-}\"\,.\{-}\".\{-}\"\,\)', '\1', 'g')) 
       if Varlength < 120 
       let Var = substitute(Var, '\(.\{-}\".\{-}\"\,.\{-}\".\{-}\"\,.\{-}\".\{-}\"\,\)', '\[email protected][email protected]', 'g') 
       else 
       let Var = substitute(Var, '\(.\{-}\".\{-}\"\,.\{-}\".\{-}\"\,\)', '\[email protected][email protected]', 'g') 
       endif 
      return Var 
endfunc 

は、Vimはそれを行うことはできません「」

関連する問題