@@ -233,11 +233,11 @@ M.on_attach = function(bufnr)
233233 if rule.key_map == '' then
234234 rule.key_map = rule.start_pair:sub(#rule.start_pair)
235235 end
236− local key = string.format('"%s"', rule.key_map)
237− if rule.key_map == '"' then
238− key = [['"']]
239− end
240− local mapping = string.format('v:lua.MPairs.autopairs_map(%d,%s)', bufnr, key)
236+ local mapping = string.format(
237+ "v:lua.MPairs.autopairs_map(%d,%q)",
238+ bufnr,
239+ rule.key_map:gsub("<", "<lt>")
240+ )
241241 api.nvim_buf_set_keymap(
242242 bufnr,
243243 'i',
@@ -249,7 +249,7 @@ M.on_attach = function(bufnr)
249249 local key_end = rule.key_end or rule.end_pair:sub(1, 1)
250250 if #key_end >= 1 and key_end ~= rule.key_map and rule.move_cond ~= nil then
251251 mapping = string.format(
252− [[v:lua.MPairs.autopairs_map(%d, '%s')]],
252+ "v:lua.MPairs.autopairs_map(%d,%q)",
253253 bufnr,
254254 key_end
255255 )
@@ -264,9 +264,9 @@ M.on_attach = function(bufnr)
264264 else
265265 if rule.key_map ~= '' then
266266 local mapping = string.format(
267− "v:lua.MPairs.autopairs_map(%d,'%s')",
267+ "v:lua.MPairs.autopairs_map(%d,%q)",
268268 bufnr,
269− rule.key_map
269+ rule.key_map:gsub("<", "<lt>")
270270 )
271271 api.nvim_buf_set_keymap(
272272 bufnr,
@@ -408,8 +408,8 @@ M.autopairs_map = function(bufnr, char)
408408 local rules = M.get_buf_rules(bufnr)
409409 for _, rule in pairs(rules) do
410410 if rule.start_pair then
411− if rule.key_map and rule.key_map:match('<.*>') then
412− new_text = line:sub(1, col) .. line:sub(col + 1, #line)
411+ if char:match('<.*>') then
412+ new_text = line
413413 add_char = 0
414414 else
415415 new_text = line:sub(1, col) .. char .. line:sub(col + 1, #line)
@@ -446,7 +446,8 @@ M.autopairs_map = function(bufnr, char)
446446 return utils.esc(utils.repeat_key(utils.key.join_right, end_pair_length))
447447 end
448448
449− if utils.compare(rule.start_pair, prev_char, rule.is_regex)
449+ if rule.key_map == char
450+ and utils.compare(rule.start_pair, prev_char, rule.is_regex)
450451 and rule:can_pair(cond_opt)
451452 then
452453 local end_pair = rule:get_end_pair(cond_opt)
@@ -471,7 +472,7 @@ M.autopairs_map = function(bufnr, char)
471472 end
472473 end
473474 end
474− return M.autopairs_afterquote(new_text, char)
475+ return M.autopairs_afterquote(new_text, utils.esc(char))
475476end
476477
477478M.autopairs_insert = function(bufnr, char)
@@ -557,10 +558,6 @@ M.autopairs_cr = function(bufnr)
557558 prev_char = prev_char,
558559 next_char = next_char,
559560 }
560−
561− local end_pair = rule:get_end_pair(cond_opt)
562− local end_pair_length = rule:get_end_pair_length(end_pair)
563−
564561 -- log.debug('prev_char' .. rule.start_pair)
565562 -- log.debug('prev_char' .. prev_char)
566563 -- log.debug('next_char' .. next_char)
@@ -568,6 +565,8 @@ M.autopairs_cr = function(bufnr)
568565 and utils.compare(rule.start_pair, prev_char, rule.is_regex)
569566 and rule:can_cr(cond_opt)
570567 then
568+ local end_pair = rule:get_end_pair(cond_opt)
569+ local end_pair_length = rule:get_end_pair_length(end_pair)
571570 return utils.esc(
572571 end_pair
573572 .. utils.repeat_key(utils.key.join_left, end_pair_length)