Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
List 如何在Vim中按行文本自动排序Quickfix条目?_List_Sorting_Vim_Dictionary - Fatal编程技术网

List 如何在Vim中按行文本自动排序Quickfix条目?

List 如何在Vim中按行文本自动排序Quickfix条目?,list,sorting,vim,dictionary,List,Sorting,Vim,Dictionary,我正在尝试按照行本身的内容按字母顺序自动对快速修复列表中的行进行排序(默认情况下,它会按照它们在文件中出现的顺序进行排序)。我已经在我的.vimrc中添加了以下内容,但出于某种原因,它会根据行号进行排序。据我所知,快速修复列表是一个字典列表,因此下面的Sortqfbytext函数应该只按每个列表项的文本内容进行排序,而忽略其余内容(包括行号) 我将按如下方式实现这个想法 autocmd!QuickfixCmdPost*调用SortQuickfix('QfStrCmp')) 功能!SortQuic

我正在尝试按照行本身的内容按字母顺序自动对快速修复列表中的行进行排序(默认情况下,它会按照它们在文件中出现的顺序进行排序)。我已经在我的
.vimrc
中添加了以下内容,但出于某种原因,它会根据行号进行排序。据我所知,快速修复列表是一个字典列表,因此下面的
Sortqfbytext
函数应该只按每个列表项的
文本
内容进行排序,而忽略其余内容(包括行号)


我将按如下方式实现这个想法

autocmd!QuickfixCmdPost*调用SortQuickfix('QfStrCmp'))
功能!SortQuickfix(fn)
调用setqflist(sort(getqflist(),a:fn))
端功能
功能!QfStrCmp(e1、e2)
让[t1,t2]=[a:e1.text,a:e2.text]

return t1我将按如下方式实现这个想法

autocmd!QuickfixCmdPost*调用SortQuickfix('QfStrCmp'))
功能!SortQuickfix(fn)
调用setqflist(sort(getqflist(),a:fn))
端功能
功能!QfStrCmp(e1、e2)
让[t1,t2]=[a:e1.text,a:e2.text]

return t1QuickFix list update setqflist()需要
'r'
标志


只需将
调用setqflist(xlist)
更改为
调用setqflist(xlist,'r')

快速修复列表更新setqflist()需要
'r'
标志


只需将
调用setqflist(xlist)
更改为
调用setqflist(xlist,'r')

您所说的“快速修复列表”是什么意思?我真的不明白你想做什么。快速修复列表是一个错误列表,带有指向错误所在位置的链接。例如,如果键入:vimgrep/readme/&:copen,它将打开quickfix窗口,其中包含指向当前文件中所有“readme”实例的链接。但是,“快速修复”窗口本身无法编辑,因为它会弄乱链接。因此,要对其进行排序,您必须创建一个新列表,编辑该列表,然后通过调用setqflist(newlisthhere)设置新的快速修复列表。基本上,我试图找出如何按字典中的一项(在本例中为“文本”项)按字母顺序对字典列表进行排序。啊,这与QuickFIX engine for FIX协议无关,是吗?请以后对您的标签更加小心。您所说的“快速修复列表”是什么意思?我真的不明白你想做什么。快速修复列表是一个错误列表,带有指向错误所在位置的链接。例如,如果键入:vimgrep/readme/&:copen,它将打开quickfix窗口,其中包含指向当前文件中所有“readme”实例的链接。但是,“快速修复”窗口本身无法编辑,因为它会弄乱链接。因此,要对其进行排序,您必须创建一个新列表,编辑该列表,然后通过调用setqflist(newlisthhere)设置新的快速修复列表。基本上,我试图找出如何按字典中的一项(在本例中为“文本”项)按字母顺序对字典列表进行排序。啊,这与QuickFIX engine for FIX协议无关,是吗?以后请小心使用您的标签。
function! s:Sortqfbytext(i1, i2)
  let textlist = []
  let textlist = [a:i1.text,a:i2.text]
  call sort(textlist)
  if textlist[0] == textlist[1]
    return 0
  elseif textlist[0] == a:i1.text
    return 1
  elseif textlist[0] == a:i2.text
    return -1
  endif
endfunction

function! s:Makesortedqflist()
  let xlist = sort(getqflist(), 's:Sortqfbytext')
  call setqflist(xlist)
endfunction

autocmd! QuickfixCmdPost * call s:Makesortedqflist()