Emacs imlecinin altındaki geçerli sözcük nasıl değiştirilir?


25

Emacs imlecinin altındaki geçerli sözcüğü nasıl değiştiririm?

Sorgu-replace veya replace-string kullanabileceğimi biliyorum ama her yaptığımda değiştirilecek dizenin tamamını yazmam gerekiyor, bu sadece can sıkıcı bir durum.

Vi'de eşdeğer komut sözcüğü vardır ve sözcüğü değiştirmek için imlecin altına çekmek için bir kısayol kullanabilirsiniz:

nmap <leader>z :%s#\<<C-r>=expand("<cword>")<CR>\>#

Emacs ile nasıl yapılacağını bilen var mı?


Yanıtlar:


2

Kullanım kopyalayıp yapıştırın: M-d C-_ M-x replace-string RET C-y( kill-word, undo, replace-string, yank). Zaten değiştirme başladıysanız, her zamanki pencere ile kopya-yapıştır veya anahtarlama komutları tampon yapmaya orijinal tampon geri dönebilirsiniz: M-x replace-string RET … C-x o M-d C-_ C-x o C-y. Birden çok sözcüğü değiştirmek için M-d(örn. ESC 4 2 M-d) Önek argümanını kullanabilirsiniz .

İmlecin içindeki bir veya daha fazla sözcüğü değiştirmeyi planlıyorsanız, bunun yerine artan aramadan ( C-s) C-wbaşlayabilir, imlecin altındaki sözcüğü aramaya başlamak için kullanabilirsiniz , daha sonra M-%geçmek için tuşuna basın replace-string.


26

Artımlı arama bu özelliğe sahiptir, ancak değiştirme işlevleri yoktur. Neyse ki, artan arama yapar bir arama terimi seçtikten sonra moduna yerine geçmek için bir yol var. Yani:

  • Basın C-sartımlı arama moduna anahtara
  • C-wGeçerli sözcüğü arama arabelleğine kopyalamak için tuşuna basın Birden çok kelime eklemek için tuşa basmaya devam edebilirsiniz ve ayrıca C-M-ykarakterleri tek tek sıralamak ve C-ytüm satırları sıralamak için kullanabilirsiniz
  • Oluşturmuş M-%olduğunuz arama arabelleğini kullanarak değiştirme moduna geçmek için basın .

Muhtemelen M-%normal şekilde kullanmayı bildiğiniz gibi , bu her bir eşleşme için ne yapmanız gerektiğini soran bir sorgu değiştirme modudur. Sadece hepsini değiştirmek istiyorsanız !, ilk karşılaşmaya basın


9
;; query-replace current word
(defun qrc (replace-str)
   (interactive "sDo query-replace current word with: ")
   (forward-word)
   (let ((end (point)))
      (backward-word)
      (kill-ring-save (point) end)
      (query-replace (current-kill 0) replace-str) ))

1
Bu çözüm iyi çalışıyor ve manuel olarak nasıl yapılacağından çok daha faydalı. Kopyala ve yapıştır ile rahatsız edilmek için çok tembelim.
Paul Coccoli

2

Emacs için kesinlikle yeniyim ama aşağıdakileri önerebilirim:

M-b       to move backward over a word
M-d       to kill up to the end of the word

Şimdi yeni bir kelime yazabilirsin. Neredeyse cwvim gibi çalışır


1

M-S-%Sadece M-nimlecin altındaki kelimeyi doldurmakla basıp değiştirirseniz , tekrar basmak onu "sembol sınırlayıcı" içine alır.


1

Vim'den Emacs'a taşındığından beri aynı şeyi istiyordum.

Bazı araştırma ve deneylerden sonra, aynı şeyi Evil paketinin kurulu olduğu veya ara boşlukları kullanarak yapmanıza izin veren aşağıdaki işlevi gördüm.

Ayrıca bölge aktif (veya vim teriminde görsel seçim) ile çalışır ve abc-def-hij gibi bir sözcüğün yerini alması oldukça yararlı olabilir:

; replace current word or selection using vim style for evil mode
(defun evil-replace-word-selection()
(interactive)
(if (use-region-p)
    (let (
            (selection (buffer-substring-no-properties (region-beginning) (region-end))))
        (if (= (length selection) 0)
        (message "empty string")
        (evil-ex (concat "'<,'>s/" selection "/"))
        ))
    (evil-ex (concat "%s/" (thing-at-point 'word) "/"))))

sonra init.el dosyasında aynı anahtar bağlayıcıyı tanımlayın:

(global-set-key (kbd "\C-co") 'evil-replace-word-selection)

keybinding, "space z" olan vim'den biraz farklıdır, ancak kötü mod varken emacs'ta bunun nasıl haritalandırılacağını çözemedim. Önek vb. değil şikayet etmeye devam edin ve emacs konusunda nispeten yeniyim. Ama hala çok da kötü değil ve şu anda bu çözümden mutluyum.


0

Bu zaten cevaplanmış ve yorum yapamam çünkü henüz yeterince itibarım yok. Ama aradığın şey ciwvim.

Emacs'de geldiğim en yakın ems:

M-b M-d

Bu, imlecin açık olduğu sözcüğün başına döner ve sözcüğü siler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.