Есть ли в emacs эквивалент команды VIM ci? В основном я хочу заменить текст внутри набора кавычек.
В VIM я могу ci) или ci] или ci}, чтобы "изменить внутренний *" ...
Вверху моей головы самая близкая команда, M-z "
которая удаляет все от точки до следующего вхождения символа ".
Существует также C-M-k
, иначе говоря, «kill сбалансированное выражение», которое удаляет оператор в круглых скобках или строку в двойных кавычках и т. Д. На основе текущего определения режимов «сбалансированного выражения» и символа, находящегося в данный момент под точкой (т. Е. Оно работает только если курсор находится на открытии "" "или" ("и т. д.).
По аналогии с предложением Джастина CM-SPACE дает вам «mark-sexp», который выберет балансировку, кавычки и т. Д., А затем вы можете Cw или что-то еще, чтобы заставить его уйти. В случае, если вы хотите ВИДЕТЬ, что вы собираетесь удалить, прежде чем удалить это ...
Да! Эквивалентом команды VIM ci "команда в Emacs является ... ci" :-)
http://www.emacswiki.org/emacs-de/Vimpulse
Просто наткнулся на этот вопрос; Вот индивидуальное решение, которое работает для меня:
(defun seek-backward-to-char (chr)
"Seek backwards to a character"
(interactive "cSeek back to char: ")
(while (not (= (char-after) chr))
(forward-char -1)))
(defun delete-between-pair (char)
"Delete in between the given pair"
(interactive "cDelete between char: ")
(seek-backward-to-char char)
(forward-char 1)
(zap-to-char 1 char)
(insert char)
(forward-char -1))
Затем свяжите delete -ween-pair с любым ключом, который вам нравится. Для меня это связано с Cz я.
Боюсь, я не знаю о функции CIM VIM, но вы смотрели на Emacs regexp replace? Я не могу говорить с точной семантикой или с тем, насколько легко ее использовать в сравнении, но я бы использовал то, что, как я думаю, вы хотите.
Я сделал второстепенный режим, который предоставляет некоторые из тех средств Vim, которые называются Markit .
источник
Magnars (автор сайта EmacsRocks) написал этот плагин, чтобы делать именно то, что вы просите.
https://github.com/magnars/change-inner.el
Очевидно, вы также можете использовать режим зла.
источник
Вот моя версия, которая удалит все внутри (или включая) совпадающую пару символов. Пары символов определены в списке, так что соответствующий начальный / конечный символ известен. Я сопоставил его с "Cc i" для изменения и "Cc a" для изменения всех.
Он также копирует удаленные символы в буфер обмена для последующего вставки.
источник
Это было то, чего мне не хватало в Vim, и
zap-to-char
, похоже, это не правильно.Вот моя скромная попытка воссоздать "ci" и "ca":
Обычно условие-случай не является необходимым, поскольку третий (необязательный) параметр search-forward / search-backward предназначен для указания того, что делать в случае сбоя поиска. Но по какой-то причине размещение второго поиска в качестве третьего параметра для первого приводит к странному поведению.
источник
Я попробовал решения здесь, но нашел, что каждое из них хотело в некотором роде, таким образом, я придумал это. Он принимает начальный или конечный разделитель и использует встроенные функции Emacs, чтобы не нуждаться в таблице перевода для разделителей.
источник