Python vim:gq在包装文本时忽略开引号
假设我在一个文件(例如Python脚本)中有一个字符串列表,如下所示: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",
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。但我认为,可以在一行中获得输出(不需要换行).够了吗?谢谢你的努力,但不幸的是,这并不能完全满足我的要求。如果引号内的文字较短,我希望每行有更多的“单词”,如果它们较长,我希望更少,而这只是在每行放三个。