Sugeruję zmianę tytułu na „wyszukaj i zamień cały bufor”. Globalnie może odnosić się również do całych projektów.
Malabarba
1
Jest to obszar, w którym Vim / Evil jest trudny do pokonania::%s/foo/bar
shosti
@shosti: Właściwie myślę, że twoja metoda wymaga więcej naciśnięć klawiszy. Tylko
mówię
Odpowiedzi:
14
Nie widzę takiego wsparcia przy jednoczesnym zachowaniu pozycji wyjściowej. (Nie widzę sposobu na zawijanie do początku bufora, gdy wyszukiwanie dobiega końca).
Najlepszym rozwiązaniem jest M-<przejście do początku bufora, a następnie po zakończeniu query-replacenaciśnij przycisk, C-uC-spaceC-uC-spaceaby przejść z powrotem do punktu początkowego.
Możesz dodać to do init.elpliku, aby M-%domyślnie zaktualizować zachowanie zastępowania słowa w całym buforze:
(defun my/query-replace (from-string to-string &optional delimited start end)
"Replace some occurrences of FROM-STRING with TO-STRING. As each match is
found, the user must type a character saying what to do with it. This is a
modified version of the standard `query-replace' function in `replace.el',
This modified version defaults to operating on the entire buffer instead of
working only from POINT to the end of the buffer. For more information, see
the documentation of `query-replace'"
(interactive
(let ((common
(query-replace-read-args
(concat "Query replace"
(if current-prefix-arg " word" "")
(if (and transient-mark-mode mark-active) " in region" ""))
nil)))
(list (nth 0 common) (nth 1 common) (nth 2 common)
(if (and transient-mark-mode mark-active)
(region-beginning)
(buffer-end -1))
(if (and transient-mark-mode mark-active)
(region-end)
(buffer-end 1)))))
(perform-replace from-string to-string t nil delimited nil nil start end))
;; Replace the default key mapping
(define-key esc-map "%" 'my/query-replace)
I uzyskać to samo zachowanie od query-replace-regexp:
(defun my/query-replace-regexp (regexp to-string &optional delimited start end)
"Replace some things after point matching REGEXP with TO-STRING. As each
match is found, the user must type a character saying what to do with
it. This is a modified version of the standard `query-replace-regexp'
function in `replace.el', This modified version defaults to operating on the
entire buffer instead of working only from POINT to the end of the
buffer. For more information, see the documentation of `query-replace-regexp'"
(interactive
(let ((common
(query-replace-read-args
(concat "Query replace"
(if current-prefix-arg " word" "")
" regexp"
(if (and transient-mark-mode mark-active) " in region" ""))
t)))
(list (nth 0 common) (nth 1 common) (nth 2 common)
(if (and transient-mark-mode mark-active)
(region-beginning)
(buffer-end -1))
(if (and transient-mark-mode mark-active)
(region-end)
(buffer-end 1)))))
(perform-replace regexp to-string t t delimited nil nil start end))
;; Replace the default key mapping
(define-key esc-map [?\C-%] 'my/query-replace-regexp)
:%s/foo/bar
Odpowiedzi:
Nie widzę takiego wsparcia przy jednoczesnym zachowaniu pozycji wyjściowej. (Nie widzę sposobu na zawijanie do początku bufora, gdy wyszukiwanie dobiega końca).
Najlepszym rozwiązaniem jest M-<przejście do początku bufora, a następnie po zakończeniu
query-replace
naciśnij przycisk, C-uC-spaceC-uC-spaceaby przejść z powrotem do punktu początkowego.źródło
transient-mark-mode
jest włączony. W przeciwnym razieC-SPC C-SPC
tymczasowo włączytransient-mark-mode
Możesz dodać następujące polecenie do pliku inicjującego emacsa i powiązać go z wybranym naciśnięciem klawisza.
źródło
Możesz wykonać następujące kroki:
C-x h
- Wybierz cały bufor lubM-<
- Idź na górę buforaM-%
- Zainicjujquery-replace
!
- Wymuś zastąpienie wszystkichC-u C-SPC C-u C-SPC
- Wróć do pozycji wyjściowejźródło
Możesz dodać to do
init.el
pliku, abyM-%
domyślnie zaktualizować zachowanie zastępowania słowa w całym buforze:I uzyskać to samo zachowanie od
query-replace-regexp
:źródło
Jeśli używasz Sopli , możesz wyszukiwać i zamieniać cały bufor (lub wiele buforów, plików lub celów zakładek).
I w przeciwieństwie do
query-replace
(np.C-x h M-%
):Możesz nawigować po meczach w dowolnej kolejności .
Wymiana jest na żądanie: nie musisz odwiedzać każdego meczu i odpowiadać, czy chcesz go wymienić.
źródło
Jest to rozwiązanie, którego obecnie używam, zaczyna się od początku bufora i powróci do starego punktu po wymianie.
źródło