vim:gq在包装文本时忽略打开的引号

时间:2015-12-03 22:33:24

标签: python vim

假设我有一个文件中的字符串列表(例如Python脚本),如下所示:

var stream = Collection.find().stream();
stream.on('data', function (doc) {
      console.log(doc.da)
      stream.pause()
      Record.update({oldcolid: doc.da}, {collectionId: doc._id}, { multi: true }, function (err, raw) {

          if(err) {console.log(err)}
          console.log(raw)
          stream.resume()
      })



})

stream.on('error', function (err) {
  console.log(err)
})

stream.on('close', function () {
  console.log("done")
})

如果我直观地选择了这个文本,我可以使用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 个答案:

答案 0 :(得分:1)

我认为没有保留的命令可以做到这一点,但我们可以做到这一点 将它制作成一行然后通过正则表达式,将它打破到你想要的愿望。

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

将整个事物映射到一个键中。这样可以让你轻松。

答案 1 :(得分:0)

请将此脚本保存到文件中并加载到vim中。

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


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

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

阻止文字并点击键#34; a&#34;