A solução mais simples: use ciW
para selecionar uma palavra delimitada por espaços em branco.
A questão maior tem a ver com o valor do _
caractere na tabela de sintaxe . O problema é que _
, por padrão, um constituinte de símbolo na tabela de sintaxe e você deseja tratá-lo como um constituinte de palavra.
Se você estiver usando o emacs 24.4, tente ativar superword-mode
. Eu mesmo não tentei, então sua milhagem pode variar.
Uma alternativa é simplesmente modificar a tabela de sintaxe e dizer ao Emacs que você deseja que ele trate o _
caractere como um constituinte de palavras, da seguinte forma:
(modify-syntax-entry ?_ "w")
Depois de fazer isso, ciw
funciona como você deseja, de modo que ele seleciona tudo abc_def_ghi
e não apenas def
.
Fazer dessa maneira, no entanto, pode ser um exagero, especialmente se você quiser que a _
contagem seja parte da palavra para o objeto de texto. Em vez disso, você pode aconselhar da evil-inner-word
seguinte maneira:
(defadvice evil-inner-word (around underscore-as-word activate)
(let ((table (copy-syntax-table (syntax-table))))
(modify-syntax-entry ?_ "w" table)
(with-syntax-table table
ad-do-it)))
Agora, _
ainda é um constituinte de símbolo para tudo, exceto para o objeto de texto com palavras internas, portanto ciw
, fará exatamente o que você deseja sem tocar na funcionalidade de qualquer outra coisa.
Você pode ler mais sobre como modificar tabelas de sintaxe no nó EmacsWiki .
w
,aw
, etc.), você pode fazer o mesmo com as seguintes funções também:evil-forward-word-begin
,evil-forward-word-end
,evil-backward-word-begin
,evil-backward-word-end
,evil-a-word
,evil-inner-word
. Nota: você precisa mudarunderscore-as-word
para valores diferentes e únicos (arbitrários).(modify-syntax-entry ?_ "w")
não funcionou para mim por algum motivo. Fazer isso interativamente também não funcionou. Alguma idéia de por que ou como eu posso depurar isso? Estou no Spacemacs, caso isso seja relevante.(modify-syntax-entry ?_ "w" rust-mode-syntax-table)
, então funcionou.superword-mode
não afeta o movimentoevil-mode
. Portanto, não é um componente para modificar tabelas de sintaxe.O trecho a seguir fará com que o Evil trate um símbolo do Emacs como uma palavra.
Isso tem a vantagem de mudar de acordo com o idioma:
é um símbolo em,
lisp-mode
mas dois símbolos (separados por-
) emc-mode
.fonte
As perguntas frequentes sobre o spacemacs oferecem a seguinte solução específica de idioma:
Também funciona em emacs regulares. Com o mal diante, ele funciona com todos os comandos relacionados com a palavra (
w
,e
,*
,#
, etc)De maneira mais geral, isso será feito para todos os principais modos:
fonte
'prog-mode-hook
uma opção para cobrir todos os idiomas?Introduzido o Emacs 24
superword-mode
, um modo secundário que trata os sublinhados como parte das palavras.evil-mode
respeita esta configuração.Aqui está a documentação:
fonte
evil-mode
, infelizmente, há um erro quandosuperword-mode
está ativado. Isso causa algum comportamento irregular quandoevil-forward-word-begin
é chamado: github.com/emacs-evil/evil/issues/721Na verdade, eu gosto bastante desse comportamento, pois talvez eu queira editar uma parte da palavra e manter as outras partes intactas. Se eu quiser passar por cima de toda a palavra que eu sempre pode usar
E
,W
ouB
, a maiúscula variantes. Isso me dá um controle mais refinado.fonte