O emacs tem o equivalente ao comando VIMs ci "? Basicamente, quero substituir o texto dentro de um conjunto de aspas.
No vim eu posso ci) ou ci] ou ci} "mudar interior *" ...
Em cima da minha cabeça, o comando mais próximo é o M-z "
que apaga tudo, do ponto até a próxima ocorrência do personagem ".
Também existe C-M-k
, também conhecido como "matar expressão equilibrada", que excluirá uma declaração entre parênteses completa ou cadeia de caracteres com aspas duplas, etc. com base na definição atual dos modos de "expressão equilibrada" e no caractere atualmente em questão (isto é, só funciona se o cursor está na abertura '"' ou '(' etc.).
Da mesma forma que a sugestão de Justin, o CM-SPACE fornece "mark-sexp", que seleciona o ponto de equilíbrio, a citação etc., e então você pode Cw ou qualquer outra coisa para fazê-lo desaparecer. Caso você queira VER o que está prestes a excluir antes de excluí-lo ...
Sim! O equivalente ao comando VIMs ci "no Emacs é ... ci" :-)
http://www.emacswiki.org/emacs-de/Vimpulse
Apenas tropeçou nessa questão; aqui está uma solução personalizada que funcionou para mim:
(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))
Em seguida, vincule excluir entre pares a qualquer tecla que desejar. Para mim, eu tenho isso ligado a Cz i.
Receio não conhecer o recurso ci do VIM, mas você já viu o Emacs regexp substituir? Não posso falar com a semântica exata ou com o quão fácil é usar em comparação, mas é o que eu usaria para o que acho que você deseja.
Eu fiz um modo menor que fornece algumas dessas instalações do Vim chamadas Markit .
fonte
Magnars (autor do site EmacsRocks) escreveu este plugin para fazer exatamente o que você está pedindo.
https://github.com/magnars/change-inner.el
Obviamente, você também pode usar o modo Evil.
fonte
Aqui está minha versão que excluirá tudo dentro (ou incluindo) de um par de caracteres correspondente. Os pares de caracteres são definidos em uma lista para que o caractere inicial / final correspondente seja conhecido. Eu mapeei para "Cc i" para alterar e "Cc a" para alterar todos.
Ele também copia os caracteres removidos para a área de transferência para colar posteriormente.
fonte
Isso era algo que estava faltando no Vim, e
zap-to-char
não parecia acertar.Aqui está minha humilde tentativa de recriar "ci" e "ca":
Normalmente, o caso de condição não é necessário, uma vez que o terceiro parâmetro (opcional) de pesquisa para frente / pesquisa para trás serve para indicar o que fazer caso a pesquisa falhe. Mas, por alguma razão, colocar a segunda pesquisa como o terceiro parâmetro para a primeira gera um comportamento estranho.
fonte
Eu tentei as soluções aqui, mas achei que cada uma delas estava querendo de alguma forma, então eu vim com isso. Ele aceita um delimitador inicial ou final e usa funções internas do Emacs para evitar a necessidade de uma tabela de conversão para delimitadores.
fonte