O Vim possui um modo Ex que pode ser inserido ao entrar Qe um modo de linha de comando que pode ser inserido com q:. Uma reclamação comum entre os novos usuários do vim é que eles entram nesses modos acidentalmente ao tentar sair do vim. Como tal, desativei essas chaves no meu ~/.vimrc
para não bater nelas acidentalmente (particularmente q:):
map q: <Nop>
nnoremap Q <nop>
Embora eu tenha lido a documentação do vim no Ex , sou um usuário moderadamente experiente do Vim e entenda a idéia básica por trás dele, ainda luto para encontrar algum uso para ele no meu uso diário do vim. Em geral, parece menos útil do que apenas digitar um comando de linha de comando padrão do vim com o prefixo :, pois as alterações não são repetidas imediatamente.
Ex tem algum uso diário prático no Vim moderno? Existe algo mais fácil de fazer no modo Ex do que com comandos padrão? Qual é a diferença entre o modo de linha de comando e o modo ex?
Q
eq:
são bem diferentes. Você está se referindo apenas àQ
direita?q:
especificamente e o mencionou como, entre as duas principais sequências, a que você tem mais problemas. E duas das respostas aqui podem ser úteis para as pessoas que a procuram pelo termo correto.q/
eq:
fazer, provavelmente os considerará alguns dos comandos mais úteis no Vim. E sim, você já sabe como usá-los, mas ainda não sabe o que eles fazem. Assista a este screencast para descobrir.Respostas:
Q
é, como você encontrou, no modo ex. Não é totalmente útil usar interativamente, mas existe porque o Vim pode ser usado para emular oex
binário antigo . De fato, muitos sistemas fornecem oex
comando simplesmente simbolizando-o paravim
.q:
, ou:<C-f>
, em vez disso, fornece uma maneira de navegar pelo histórico da linha de comando e editá-lo como um buffer normal. Isso facilita a localização de um comando anterior executado, edita-o com os comandos normais do Vim e, em seguida, executa o comando modificado. Os comandosq/
eq?
existem para fornecer a mesma funcionalidade para o histórico de pesquisa.fonte
O Vim no modo Ex é útil quando:
Basicamente,
vi
é o modo visual,ex
portanto, o Vim Ex Mode é apenas uma emulação deex
(eles ainda executam o mesmo código), portanto, é possível acessar o modo de comandoex
no vi e vice-versa. Na verdade, existem dois modos: modo Ex (vim -e
) e modo Ex aprimorado, que permite comandos mais avançados do que o modo Ex compatível com vi (vim -E
). Consulte: Qual é a diferença entre o modo Ex e o modo Ex aprimorado?Editar arquivos de maneira não interativa é o uso mais comum e as pessoas o usam de maneira semelhante
sed
eawk
, no entanto, são mais orientadas para o fluxo - eles só lêem o arquivo do começo ao fim (não foram projetados para trabalhar com várias linhas) ) whilevim
é orientado a buffer - você pode avançar e retroceder o arquivo como quiser, o que o torna tão poderoso.Basicamente:
No entanto, as pessoas parecem abusar dele por tentar editar arquivos e a verdade é que ele não edita arquivos. Em segundo lugar, suas opções como in-place (
-i
) são extensões não-padrão do FreeBSD e podem não estar disponíveis em outros sistemas operacionais. Portanto, se você deseja evitar códigos não portáveis, sobrecarga de E / S e efeitos colaterais ruins (como destruir links simbólicos), useex
o editor padrão baseado em comandos UNIX (junto comed
) o BashFAQ .Outras coisas que acho úteis no modo Ex é usá-lo como um playground (semelhante ao
python
console), onde você pode executar muitos comandos seguidos, trabalhando / depurando expressões regulares, verificando a configuração do vim, executando comandos externos ou trabalhando com registradores, etc. .Por exemplo:
o que é mais fácil no modo Ex do que no modo normal (onde você pode ver apenas o seu último comando).
Usos práticos
Eu tenho os seguintes aliases no meu
.bash_aliases
:Nota: O uso
bufdo
não éex
um método compatível com POSIX (conforme manual ); portanto, você pode considerar usá-lofind
. A!
é usado para forçar a comutação das memórias intermédias sem guardar (de outra forma de aviso é gerado).O primeiro que estou usando para aparar os espaços finais em todos os meus arquivos de origem, por exemplo:
O segundo converte todas as guias em espaços (recursivamente), por exemplo:
Para mim
retab
, basta usar , mas há algumas desvantagens descritas aqui . Adicione extra-V
para aumentar a produção de verbosidade.Observe que os exemplos acima usam zsh / bash4 globbing (
**
), portanto, verifique se o seu shell suporta e está ativado.Para exemplos mais práticos (como analisar arquivos html), verifique:
Como converter um arquivo de código fonte em HTML?
Por exemplo
Aprenda também mais sobre o modo Ex em:
fonte
ex
que está comed
,sed
ouawk
?ex
modo. Eu não entendo por que você tem um bang (!
) no seu comando detrim
aliasbufdo
. Isso não abandonará todas as alterações em todos os arquivos, exceto o último? Se não, por que não?!
basicamente não funcionará, pois cada vez que o buffer é alternado,ex
reclamamos de alterações não salvas (e estamos salvando alterações no finalxa
). O aviso pode ser desativado, mas é muito mais fácil adicionar!
.!
comando falhará se o buffer não puder ser abandonado, mas não especifica explicitamente que!
fará com que o buffer não seja descartado ... Portanto, "abandonado" neste caso significa "descartado" , porque não contém nada que não esteja gravado no disco "? Ou o que? (Estou olhando para:help bufdo
)Eu raramente uso ex-mode, mas quando preciso, sou grato por sua existência.
Às vezes, acesso a sistemas via ssh por VPN, e essas conexões às vezes podem ficar lentas. Para piorar o problema, às vezes eu preciso editar um arquivo no lado remoto que, além de estar atrás do ssh e da VPN, está em uma conexão serial lenta (9600 baud mais latência de rede).
Em momentos como esse, o feedback visual e as atualizações da tela se tornam mais um obstáculo, porque o que eu vejo é atrasado (o efeito é como falar em um microfone, mas com alto-falantes distantes, como em um estádio esportivo. e às vezes confuso devido ao atraso no feedback).
Nesse caso, fazer com que as alterações não sejam repetidas é uma vantagem útil, pois posso fazer mais em menos tempo quando não estou esperando a atualização da tela.
Quando terminar de editar, volto ao modo visual para uma atualização de tela única para revisar meu trabalho. Então eu posso voltar ao modo ex ou salvar, porque já terminei.
fonte
A janela da linha de comando é útil para escrever comandos longos e complicados. Como o histórico de comandos é aberto como uma janela, você pode usar qualquer navegação do vim ou comando / mapeamento de edição.
Digamos que você queira editar um longo comando de substituição que você executou uma vez, mas que cometeu um erro:
Para alterar a string de pesquisa, você não pode usar movimentos do vim como
b
na linha Ex para navegar (embora eu acredite que haja mapeamentos importantes para esta navegação). Em vez disso, a maioria das pessoas pressionava a tecla de seta para a esquerda várias vezes.Uma maneira melhor: pressione
q:
para ir para a janela da linha de comandos,k
para ir até o último comando e navegar com movimentos normais para a parte do comando que você deseja alterar. Quer mudar uma palavra inteira, não há problema:ciw
.fonte
q:
é a linha de comando Ex? A ajuda usa apenas a frase "Ex" para o modo mencionadoQ
, mas isso não suporta a edição padrão do vim a que você está se referindo - apenas oq:
faz, que a ajuda chama simplesmente de "modo de linha de comando". Sei que confundi os dois no começo, mas provavelmente devemos ter certeza de que somos claros sobre a distinção aqui.:help q:
antes de decidir usar essa frase, mas posso estar confuso sobre a terminologia.:
, mas eu poderia estar usando isso errado.q:
não abre uma linha de comando Ex. Abre a janela do histórico de comandos , na qual os comandos Ex atuais e anteriores podem ser editados. A linha de comando Ex é o que você obtém quando pressiona:
no modo Normal.:
comandos como sendo comandos 'Ex'. IMHO realmente apenas os comandos que estão realmente disponíveis no Ex devem ser considerados como comandos Ex.Foi-me dito por uma pessoa com visão parcial que está ficando cega que ele está mudando para ex, então esse é um uso. Eu próprio sou consideravelmente mais velho que o vi e mudei de ed para ex há muito tempo (sim, eu sei, "ed é o editor padrão"). A única coisa que faço no modo vi é% -bouncing para combinar parens ao escrever o código Lisp.
fonte
ex
especificamente foi mencionado.Além dos usos já mencionados aqui, ex também é uma maneira de editar arquivos no console linux, se isso estiver na plataforma S / 390, e o console estiver orientado a linhas em vez de orientado a tela.
fonte
Provavelmente não. No entanto, ao entrar no modo Ex não é realmente útil, aprender os comandos Ex ainda é útil, principalmente porque você usa comandos de edição ex com
:g/
comandos globais para operar nas linhas correspondentes.fonte
O "ex" original era a versão atualizada do editor de texto "ed" no Unix. No 2BSD, um modo visual foi adicionado e o novo editor foi chamado "vi".
Se alguém quiser usar a linha de comando ex, ele mudará para o modo de comando com a tecla ":". Portanto, no meu melhor entendimento, ex não existe realmente por nostalgia, é a parte de fornecer o modo de comando.
Você também pode entrar no modo de inserção pressionando
pressione "enter" e digite seu texto. Saia com ^ c. Ou digite tudo em uma linha de comando, como
fonte