Existem vários comandos no Emacs que se aplicam a "palavras". Exemplos incluem forward-word
, kill-word
, upcase-word
, mark-word
, transpose-words
, etc. A definição de "palavra" parece variar um pouco entre os comandos. Por exemplo, forward-word
irá parar com um sublinhado dentro de uma palavra (por exemplo foo_bar
), mas mark-word
não para o sublinhado.
É possível alterar a definição de "palavra" quando estou no modo prog, para que o Emacs use os limites de palavras apropriados para a sintaxe do idioma atual?
Quando estou dentro c-mode
, quero forward-word
pular os sublinhados, e quando estou lisp-mode
, quero forward-word
pular os hífens e os sublinhados, etc.
fonte
C-M-f
está vinculadoforward-sexp
e não se comporta nada como o que você descreve. Você está certo de que o que eu quero é navegar por símbolos, mas não vejo essa opção.forward sexp
é essencialmente aforward-symbol
maior parte do tempo, com a versatilidade adicional de também repassar chaves. Você deveria dar uma chance.forward-sexp
é uma aproximação aproximada deforward-symbol
. Para iniciantes, ele pode confundir você sobre funções inteiras, aterrando centenas de linhas a partir de onde você começou. Ele também pula sobre listas de argumentos, etc. E tente o seguinte: dado o seguinte código lisp,(global-set-key [remap list-buffers] 'ibuffer)
coloque o cursor no meio da palavraremap
e executeforward-sexp
algumas vezes. Isso gera um erro quando atinge o fechamento]
. Não, obrigado.superword-mode
pode ser o seu cara.C-M-f
eC-M-t
agir sobre símbolos (eles atuam sobre sexps). Vou editar para corrigir essa impressão. Mas você certamente pode vincularforward-symbol
a qualquer chave que desejar, se a achar particularmente útil. Não existetranspose-symbols
, mas você pode escrever um, novamente, se achar que é útil.Dê uma olhada
superword-mode
esubword-mode
. A Superword trata os sublinhados como parte de uma palavra em vez de um limite; portanto,foo_bar
seria tratada como uma única palavra .A subpalavra faz o oposto, exceto para camelCase, portanto
fooBar
é tratada como duas palavras em vez de uma.Parece que o comportamento que você deseja é
cc-mode
usarsuperword-mode
.Eu recomendaria a leitura na fonte
subword-mode
, pois, mesmo que esses dois modos não estejam fazendo exatamente o que você deseja, devem mostrar como alterar o comportamento de detecção de palavras.Discussão mais longa sobre emacsredux e ergomacs .
fonte
superword-mode
um bom jogoparedit
? Por exemplo,paredit-forward-kill-word
não exclui a palavra inteira (contendo sublinhados) quandosuperword-mode
está ativada.paredit
está respeitando isso, então acho que está fazendo o que é solicitado.paredit-forward-kill-word
não mata a mesma palavra definida porsuperword-mode
.paredit-forward-kill-word
e parece que está fazendo sua própria análise. Portanto, pode ser capaz de trocar isso, mas provavelmente não.Se eu entendi sua pergunta, você pode modificar a tabela de sintaxe da linguagem, por exemplo, para c ++:
(modify-syntax-entry ?_ "w" c++-mode-syntax-table)
M-x apropos
a pesquisa da tabela de sintaxe também deve ajudá-lo.fonte