aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/ops.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index bb7404e46e..e4b582c89b 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -990,7 +990,8 @@ yankreg_T *get_yank_register(int regname, int mode)
i = 0;
}
reg = get_global_reg(i);
- if (get_userreg(regname) != -1) {
+ if (get_userreg(regname) != -1 && mode != YREG_YANK) {
+ // If the mode is not yank, copy the userreg data to the reg.
copy_userreg(reg, regname);
}
@@ -1061,8 +1062,7 @@ int do_record(int c)
if (reg_recording == 0) {
// start recording
- // registers 0-9, a-z and " are allowed
- if (c < 0 || (!ASCII_ISALNUM(c) && c != '"')) {
+ if (c < 0) {
retval = FAIL;
} else {
reg_recording = c;
@@ -1094,9 +1094,10 @@ int do_record(int c)
}
// Name of requested register, or empty string for unnamed operation.
- char buf[NUMBUFLEN + 2];
+ char buf[NUMBUFLEN + 5];
+ int len = (*utf_char2len)(regname);
buf[0] = (char)regname;
- buf[1] = NUL;
+ buf[len] = NUL;
(void)tv_dict_add_str(dict, S_LEN("regname"), buf);
tv_dict_set_keys_readonly(dict);
@@ -1177,6 +1178,9 @@ static int stuff_yank(int regname, char_u *p)
reg->y_type = kMTCharWise;
}
reg->timestamp = os_time();
+ if (get_userreg(regname) != -1) {
+ return eval_yank_userreg(curbuf->b_p_urf, regname, reg);
+ }
return OK;
}