Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python vim:gq在包装文本时忽略开引号_Python_Vim - Fatal编程技术网

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

Python vim:gq在包装文本时忽略开引号,python,vim,Python,Vim,假设我在一个文件(例如Python脚本)中有一个字符串列表,如下所示: my_list_of_numbers = ["one two", "three four", "five six", "seven eight", "nine ten", "eleven twelve"] my_list_of_numbers = ["one two", "three four", "five six", "seven eight", "nine ten",

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

my_list_of_numbers = ["one two",
    "three four",
    "five six",
    "seven eight",
    "nine ten",
    "eleven twelve"]
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"]
但是,元素
“九个十”
现在被分成两行

如何包装文本,同时避免在打开的引号内输入换行符?我期望的结果如下所示:

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

我不认为有一个保留的命令来做这件事,但我们可以通过 将其设置为一行,然后使用正则表达式,根据您的愿望将其打断

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

把整个东西都映射成一把钥匙。为了让您更轻松。

请将此脚本保存到文件并加载到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
vnoremap a d:call Replace(@)
函数!替换(arg1,…)
设Var=Myfun(a:arg1)
调用append(行('.')-1,[Var])
静默!%s/@@newline@@@g
安静!%s/@/\r/g
endfunc
功能!我的乐趣(s)
设Var=a:s
让Var=substitute(Var,'\n','@@newline@','g')
设Var=replacement(Var,'\s\s*',''g')
设Varlength=strlen(替换为(Var
如果变长<120
设Var=replacement(Var,'\(.\{-}\\\\{-}\',.\{-}\'\{-}\',.\{-}\'\{-}\',\)','\1@!@',g')
其他的
设Var=replacement(Var,'\(.\{-}\'\{-}\'\'\',.\{-}\'\{-}\'\',\)','\1@!@',g')
恩迪夫
返回值
endfunc

阻止文本并按键“a”

Vim无法执行此操作;必须为其提供代码才能执行此操作。
:help fp
(外部格式化程序)和
:help fex
(vimscript格式化程序)更多细节。在您的示例中,似乎使用
gq
不会有缩进,对吗?顺便说一下,如果您想获得所需的结果,请将光标放在第一行,尝试
4JjJ
@lord63.j。感谢您的贡献。
gq
将缩进,如果您设置
:filetype plugin on
:filetype indent on
:set ft=python
4JjJ
当然可以完成这项工作,但这需要我在头脑中计算出多少行可以使该行最多包含80个字符。这个问题属于vi.stackexchange。但我认为,可以在一行中获得输出(不需要换行).够了吗?谢谢你的努力,但不幸的是,这并不能完全满足我的要求。如果引号内的文字较短,我希望每行有更多的“单词”,如果它们较长,我希望更少,而这只是在每行放三个。