@@ -17928,6 +17928,7 @@ typedef struct
1792817928
1792917929static int item_compare_ic;
1793017930static int item_compare_numeric;
17931+ static int item_compare_numbers;
1793117932static char_u *item_compare_func;
1793217933static dict_T *item_compare_selfdict;
1793317934static int item_compare_func_err;
@@ -17958,6 +17959,15 @@ item_compare(s1, s2)
1795817959 si2 = (sortItem_T *)s2;
1795917960 tv1 = &si1->item->li_tv;
1796017961 tv2 = &si2->item->li_tv;
17962+
17963+ if (item_compare_numbers)
17964+ {
17965+ long v1 = get_tv_number(tv1);
17966+ long v2 = get_tv_number(tv2);
17967+
17968+ return v1 == v2 ? 0 : v1 > v2 ? 1 : -1;
17969+ }
17970+
1796117971 /* tv2string() puts quotes around a string and allocates memory. Don't do
1796217972 * that for string variables. Use a single quote when comparing with a
1796317973 * non-string to do what the docs promise. */
@@ -18091,6 +18101,7 @@ do_sort_uniq(argvars, rettv, sort)
1809118101
1809218102 item_compare_ic = FALSE;
1809318103 item_compare_numeric = FALSE;
18104+ item_compare_numbers = FALSE;
1809418105 item_compare_func = NULL;
1809518106 item_compare_selfdict = NULL;
1809618107 if (argvars[1].v_type != VAR_UNKNOWN)
@@ -18116,6 +18127,11 @@ do_sort_uniq(argvars, rettv, sort)
1811618127 item_compare_func = NULL;
1811718128 item_compare_numeric = TRUE;
1811818129 }
18130+ else if (STRCMP(item_compare_func, "N") == 0)
18131+ {
18132+ item_compare_func = NULL;
18133+ item_compare_numbers = TRUE;
18134+ }
1811918135 else if (STRCMP(item_compare_func, "i") == 0)
1812018136 {
1812118137 item_compare_func = NULL;
0 commit comments