在Emacs中,如何在同一个字符串中标记字符串?

时间:2013-06-07 10:32:58

标签: emacs

假设我的输出包含:

  

{“我不知道第三次世界大战会用什么武器,但是世界   第四次世界大战将用棍棒和石头进行战斗。“,”幸福的家庭只是   一个早期的天堂。“,”天堂没有像爱情仇恨的愤怒,   也不像女人那样的愤怒嗤之以鼻。“}

我的光标位于其中一个字符串内(在'fought'之后):

  

“我不知道第三次世界大战会用什么武器进行战斗,而是世界    第四次世界大战将用棍棒和石头进行战斗。“

我想复制整个字符串。 一般我所做的是,我转到字符串的开头,将一个字符移回“并按”C-M-SPC“并选择字符串。

但我发现这很麻烦。 有没有办法直接在字符串中选择字符串?

如果字符串已转义为双引号,也可以选择字符串,如:

  

“她说:”学习是大多数成年人的将为生活而努力   21世纪。“昨天”。

在上面,如果我的光标在'adult'之后,它应该能够正确选择外部字符串。

感谢。

3 个答案:

答案 0 :(得分:7)

expand-region就是你所追求的。 Screencastproject

答案 1 :(得分:1)

这是功能:

(defun copy-quoted-string ()
  (interactive)
  "Copies the quoted text, ignoring the escaped quotes"
  (save-excursion
     (search-backward-regexp "[^\\]\"")
     (forward-char)
     (mark-sexp)
     (kill-ring-save (point) (mark))))

;this is for testing
(global-set-key [f2] 'copy-quoted-string)

为了测试我使用了以下字符串:

"text text", "text \"quoted text\" text"

当我按F2时,当光标位于“文本文本”内时,该字符串将被复制到剪贴板中。当我在“text”引用文本\“text”时 - 复制此字符串。

答案 2 :(得分:1)

我发现了另一种选择: 感谢Vedang。

Reference

;;; Function to mark complete word, and expand to sentence etc.
;;; by Nikolaj Schumacher, 2008-10-20. Released under GPL.
(defun semnav-up (arg)
  (interactive "p")
  (when (nth 3 (syntax-ppss))
    (if (> arg 0)
        (progn
          (skip-syntax-forward "^\"")
          (goto-char (1+ (point)))
          (decf arg))
      (skip-syntax-backward "^\"")
      (goto-char (1- (point)))
      (incf arg)))
  (up-list arg))


;;; by Nikolaj Schumacher, 2008-10-20. Released under GPL.
(defun extend-selection (arg &optional incremental)
  "Select the current word.
Subsequent calls expands the selection to larger semantic unit."
  (interactive (list (prefix-numeric-value current-prefix-arg)
                     (or (and transient-mark-mode mark-active)
                         (eq last-command this-command))))
  (if incremental
      (progn
        (semnav-up (- arg))
        (forward-sexp)
        (mark-sexp -1))
    (if (> arg 1)
        (extend-selection (1- arg) t)
      (if (looking-at "\\=\\(\\s_\\|\\sw\\)*\\_>")
          (goto-char (match-end 0))
        (unless (memq (char-before) '(?\) ?\"))
          (forward-sexp)))
      (mark-sexp -1))))

(global-set-key (kbd "C-=") 'extend-selection)