'İleri kelime' kelimesinin başlangıcında dur


17

Bir satırdaki bir sözcüğün başlangıcına taşımak için genellikle forward-wordtekli ve ardından tekli çağrıları kullanırım backward-word. Sanırım forward-wordvim'lerden farklı bir şekilde alışmadım ve Emacs'ı wyıllar sonra kullandığım zaman bile bu farka alışamıyorum.

Bunun yerine kullanabileceğim bir işlev var mı forward-word, kelimelerin üzerinden atlamıyor ama bir kelimenin başında duruyor mu? İleriye doğru hareket ederken bir kelimenin başlangıcına ilerlemek için tekrar tekrar yürütülmeyen başka stratejiler var forward-charmı?


(Bir noktada) kendi ileri / geri kelimenizi / paragrafınızı ve ilgili kill-word işlevlerini yazmakla ilgilenebilirsiniz. Günlük olarak kullandığım bazı özel işlevlere üç bağlantı aşağıda verilmiştir - davranış, yıllar içinde kullandığım bazı kelime işlemcilere çok benzemektedir: stackoverflow.com/a/20456861/2112489 | stackoverflow.com/q/18675201/2112489 | superuser.com/a/685604/206164
kanun listesi

Yanıtlar:


24

misc(Emacs ile birlikte gelen) paket sahiptir yerleşik işlevi forward-to-wordne istediğini ne düşündüğünü yapar:

forward-to-word is an interactive compiled Lisp function in `misc.el'.

It is bound to M-f.

(forward-to-word ARG)

Move forward until encountering the beginning of a word.
With argument, do this that many times.

Kullanmak (require 'misc)için önce yapılandırma dosyanıza ekleyin .


Teşekkürler, bu yararlı. Ne yazık ki, bu bir kelimenin sonunda da durmuyor.
rekado

1
Doğru, ama vim de değil w. Görebildiğim kadarıyla, neredeyse mükemmel bir vim-emacs eşleme var: w= forward-to-word; e= forward-word; b= backward-word; ge= backward-to-word. Ama uzman bir vim kullanıcısı değilim, bu yüzden belki de eksik olduğum bazı incelikler var.
kullanımdan kaldırıldı

Heh, haklısın. Ben vim olduğum zaman tahmin w, eve bsadece uzak bulanıklık ve sadece hareket. Tuhaf. Her wiki noktada da durduğumdan emindim! Bu yüzden, cevabınızı kabul edeceğim, çünkü tam olarak soruma uyuyor :)
rekado

4

Sen hiç fonksiyonu aşağıda bağlayabilir M-fve bağlama orijinal forward-wordiçin M-F. Bu fonksiyon sadece alır argve üzerine geçirir forward-wordfonksiyonu. Böylece evrensel argümanlar orijinal işlev kadar iyi çalışır.

(defun modi/forward-word-begin (arg)
  "Move forward a word and end up with the point being at the beginning of the
next word.  Move point forward ARG words (backward if ARG is negative).
If ARG is omitted or nil, move point forward one word."
  (interactive "p")
  (forward-word arg)
  (forward-word 1)
  (backward-word 1))

Yukarıdaki işlevin her zaman doğru şeyi yapmayabileceğine dikkat edin ; noktanın zaten bir kelimenin başlangıcında olup olmadığına çok bağlıdır.


Yukarıdaki kelimeyi , sözdizimi tablosuna göre değil, kesinlikle boşluk ayırmada olduğu bir başka yöntem :

(defun modi/forward-word-begin (arg)
  "Move forward ARG (defaults to 1) number of words.
Here 'words' are defined as characters separated by whitespace."
  (interactive "p")
  (dotimes (_ arg)
    (forward-whitespace 1)))

Kredi bu fikir için @glucas'a gidiyor .


1

Mükemmel 'ileri / geri kelime' işlevleri için uzun ve acı verici bir aramanın ardından, şimdi çok mutlu olduğum aşağıdakileri buldum:

(progn
  (defun boundary ()
    (and      (= (char-syntax (char-after))  ?w)
         (not (= (char-syntax (char-before)) ?w))))
  (defun my-forward-word ()
    (interactive) 
    (while (progn (forward-char)  (not (boundary)))))
  (defun my-backward-word ()
    (interactive) 
    (while (progn (backward-char) (not (boundary)))))
  (global-set-key [M-right] 'my-forward-word)
  (global-set-key [M-left]  'my-backward-word)
  )

0

Kullanmak istiyorsanız evil, wnormal durumda evil-forward-word-beginbağlısınız, bu da peşinde olduğunuz Vim tarzı işlevselliktir.


Eskiden eviluzun zaman önce kullanıyordum, ama bir süredir god-modedüzenli Emacs bağları kullanıyorum.
rekado

0

Bir satırdaki bir sözcüğün başlangıcına taşımak için genellikle birden çok ileri kelime çağırma ve ardından tek bir geriye dönük kelime kullanırım.

Bahsettiğiniz gibi, hile iki kelime ileri, sonra bir kelime geriye gitmek.

Aşağıdakiler hile yapmalı ve alt kelime modu gibi diğer modlara saygı göstermelidir.

(define-key global-map (kbd  "M-f")
  (lambda ()
    (interactive)
    (forward-word)
    (forward-word)
    (backward-word)))

Bu, /emacs//a/4272/508'in bazı durumlarını içermeyen, ancak anlaşılması daha kolay bir ilk sürümüdür .

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.