Skip to content

Instantly share code, notes, and snippets.

@mattn
Created January 18, 2012 07:55
Show Gist options
  • Save mattn/1631857 to your computer and use it in GitHub Desktop.
Save mattn/1631857 to your computer and use it in GitHub Desktop.
[vim]ユーザ補完関数で"."レジスタが壊れる問題の修正パッチ
diff -r 0dabc2ce136c src/edit.c
--- a/src/edit.c Tue Jan 10 22:31:32 2012 +0100
+++ b/src/edit.c Wed Jan 18 16:55:02 2012 +0900
@@ -3465,11 +3465,17 @@
if (ins_compl_need_restart())
ins_compl_restart();
- vim_free(compl_leader);
- compl_leader = vim_strnsave(ml_get_curline() + compl_col,
- (int)(curwin->w_cursor.col - compl_col));
- if (compl_leader != NULL)
- ins_compl_new_leader();
+ /* When 'always' is set, don't reset compl_leader. While completing,
+ * cursor don't point original position. So if change compl_leader, it
+ * break redo register. */
+ if (!compl_opt_refresh_always)
+ {
+ vim_free(compl_leader);
+ compl_leader = vim_strnsave(ml_get_curline() + compl_col,
+ (int)(curwin->w_cursor.col - compl_col));
+ if (compl_leader != NULL)
+ ins_compl_new_leader();
+ }
}
/*
@@ -4554,6 +4560,11 @@
int found_end = FALSE;
int advance;
+ /* When user complete function return -1 for findstart which is next
+ * time of 'always'., compl_shown_match become NULL. */
+ if (compl_shown_match == NULL)
+ return -1;
+
if (compl_leader != NULL
&& (compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0)
{
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment