diff options
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r-- | src/nvim/eval.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 3f73074333..370565c441 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -3446,12 +3446,10 @@ static int eval7(char **arg, typval_T *rettv, evalarg_T *const evalarg, bool wan // Register contents: @r. case '@': (*arg)++; + int regname = mb_cptr2char_adv((const char**) arg); if (evaluate) { rettv->v_type = VAR_STRING; - rettv->vval.v_string = get_reg_contents(**arg, kGRegExprSrc); - } - if (**arg != NUL) { - (*arg)++; + rettv->vval.v_string = get_reg_contents(regname, kGRegExprSrc); } break; @@ -7073,16 +7071,17 @@ void set_argv_var(char **argv, int argc) /// Set v:register if needed. void set_reg_var(int c) { - char regname; + int regname; if (c == 0 || c == ' ') { regname = '"'; } else { - regname = (char)c; + regname = c; } + // Avoid free/alloc when the value is already right. if (vimvars[VV_REG].vv_str == NULL || vimvars[VV_REG].vv_str[0] != c) { - set_vim_var_string(VV_REG, ®name, 1); + set_vim_var_string(VV_REG, reg_to_mb(regname), -1); } } |