如何反转在​​邪恶的视觉模式中选择的字符串?

时间:2017-09-07 05:30:36

标签: string emacs

我正在使用Spacemacs,尝试编写一个函数来反转在恶意视觉模式中选择的字符串。这是我到目前为止所得到的:

(defun fengqi/string-reverse (beg end)
  (interactive)
  (let ((string-to-reverse (buffer-substring-no-properties beg end)))
    (message string-to-reverse beg end))
    ;; (delete-region beg end)
    ;; (insert (string-reverse string-to-reverse))
  )

显然它不起作用。我如何

  1. 获取所选区域?
  2. 用我想要的替换它?
  3. 我看过Enter Beg End parameters automatically in Evil-Visual-Mode,这很有帮助,但我仍然不知道怎么做。

    回答评论中的一些问题:

    当我在搜索某些解决方案时,在this blog中找到了函数string-reverse。我在*ielm*缓冲区中尝试过它。

    我想要的是反转在邪恶视觉模式中选择的字符串的功能。

2 个答案:

答案 0 :(得分:0)

我最近取得了一些进展,但仍有一些问题需要解决。

  1. 在邪恶视觉模式中选择的文本实际上似乎与本机emacs选择不同。我错过的是将code character传递给interactive rsearch-forward

  2. 根据this blog,我现在使用replace-match(defun fengqi/string-reverse (beg end) (interactive "r") (save-restriction (narrow-to-region beg end) (let ((string-to-reverse (buffer-substring-no-properties (point-min) (point-max)))) (message string-to-reverse) (goto-char (point-min)) (search-forward string-to-reverse) (replace-match (string-reverse string-to-reverse))))) 来替换字符串。

  3. 现在功能如下:

    Abcde

    但是还有一个我不知道原因的错误。当所选文本的第一个字符为大写时,此功能不能正常工作:

    对于edcbA我希望结果为EdcbA,但我会得到<!DOCTYPE html> <html> <head> <title></title> </head> <body> <table> <tr> <td></td> <td>{Ticket}</td> </tr> </table> </body> </html> var html = fs.readFileSync('ticket.html', 'utf8'); //html file var GetImage = fs.readFileSync('QRTicket.png'); //image file var customHtml = customHtml.replace('{Ticket}', GetImage); pdf.create(customHtml, options).toFile('QRImage.pdf', function(err, res) { if (err) return console.log(err); console.log(res); }); ,我不明白为什么。

答案 1 :(得分:0)

这是另一个实现:

    (defun ar-reverse-at-point (&optional beg end)
  "Replace a string or region at point by result of ‘reverse’.

Works at any string detected at position, unless
optional BEG as start and
optional END as end are given as arguments or
an active region is set deliberately"
  (interactive "*")
  (let* ((pps (parse-partial-sexp (point-min) (point)))
     ;; (save-excursion (cadr (ar-beginning-of-string-atpt)))
     (beg (cond (beg)
            ((use-region-p)
             (region-beginning))
            ((and (nth 8 pps)(nth 3 pps))
             (goto-char (nth 8 pps))
             (point))))
     ;; (copy-marker (cdr (ar-end-of-string-atpt)))
     (end (cond (end)
            ((use-region-p)
             (copy-marker (region-end)))
            ((and (nth 8 pps)(nth 3 pps))
             (forward-sexp)
             (copy-marker (point)))))
     (erg (buffer-substring beg end)))
    (when (and beg end)
      (delete-region beg end)
      (insert (reverse erg)))))