Este script vim faz seu trabalho
#!/usr/bin/vim
%!sed 's/ .*//'
%!sort -fu
norm dd
% norm $D
O único problema é esta mensagem no final (tenho que pressionar ENTER no teclado)
"20 lines filtered
20 lines filtered
Press ENTER or type command to continue
"
Como simular ENTER no script? Para evitar pressionar manualmente coloquei isso no final do script mas não funciona
norm <^M>
A verificação do problema é sed (que produz a saída), não vim. Como deixar o sed mais silencioso? Usar "sed -n" produz uma saída vazia.
Tentei com um texto com essas linhas
Resposta literal
Use o vim
:silent
ou:silent!
para prefixar comandos individuais cujas mensagens não devem ser emitidas, por exemplo:Para saber a diferença entre
:silent
e:silent!
, consulte silencioso vs. silencioso! - Qual é a diferença?Uma abordagem diferente (correta)
Dependendo se as ações do seu script estão relacionadas aos arquivos que você abre no Vim, é melhor usar os próprios comandos
:sort
e comandos do Vim:s
, evitando comandos externos desnecessários, ou criar um script de shell (ou um alias de shell, ou uma função de shell) de outra forma.Usando a função Vim
O seguinte script, sort.vim :
pode ser originado com
:source sort.vim
e a funçãoSortit
pode ser chamada com:silent! call Sortit()
ou pressionando\s
. Alternativamente, a função pode ser adicionada a $HOME/.vimrc , eliminando a necessidade de obter o script manualmente.Usando a função shell
O seguinte arquivo sortit.sh contém a função shell
sortit
:e pode ser originado, após o qual essa função pode ser chamada no shell:
assim como acontece com o script Vim, esta função pode ser adicionada ao $HOME/.profile do usuário ou a um arquivo semelhante, evitando a necessidade de originar o script.
Editar: usando o texto de exemplo da pasta vinculada na pergunta:
Claro, se você passar
-n
para sed(1) na função shellsortit
, ele não produzirá saída a menos que op
comando explícito seja fornecido, mas neste exemplo não faz sentido. Só não use essa opção, mas os comandos literais desta resposta?