簡體   English   中英

在不同的主要模式下打開選擇。

[英]Open selection in different major mode.

是否可以選擇文本的某些部分並在具有不同模式的不同緩沖區中打開它?

例如,如果我經常在ESS模式下工作(R語法突出顯示),

astring <- '<form>
<input type="checkbox" id="foo", value="bar">
</form>'

如果選中單引號中的文本,我想在新的緩沖區HTML模式下編輯它(類似於orgmode中的 org-src-lang-modes )。

您所描述的內容稱為“間接緩沖區”。 您可以通過調用Mx clone-indirect-buffer創建一個。 這將創建您正在編輯的緩沖區的第二個副本。 在一個緩沖區中進行的任何更改都在另一個緩沖區中進行鏡像。 但是,兩個緩沖區可以有不同的主要模式處於活動狀態,因此一個可以處於ESS模式,另一個可以處於HTML(或任何您喜歡的)。

有關詳細信息,請參閱手冊

這是使用narrow-to-region處理問題的一種方法 - 該示例考慮在鍵入Mx narrow-to-single-quotes單引號時點(光標)將介於單引號之間。 一個簡單的兩行函數可用於退出 - (widen) (ess-mode) ; 或者,您可以通過recursive-edit獲得樂趣。 當然,這與在新緩沖區中打開文本不同。 類似的功能也可用於將區域復制到新緩沖區,但我假設原始海報可能希望將編輯后的文本合並回主緩沖區。

(defun narrow-to-single-quotes ()
"When cursor (aka point) is between single quotes, this function will narrow
the region to whatever is between the single quotes, and then change the
major mode to `html-mode`.  To exit, just type `M-x widen` and then
`M-x [whatever-previous-major-mode-was-used]`."
(interactive)
  (let* (
      (init-pos (point))
      beg
      end)
    (re-search-backward "'" nil t)
    (forward-char 1)
    (setq beg (point))
    (re-search-forward "'" nil t)
    (backward-char 1)
    (setq end (point))
    (narrow-to-region beg end)
    (html-mode)
    (goto-char init-pos)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM