Aplicando um comando à linha atual em menos?

1

Digamos que listamos /usr/bin com ls - isso pode parecer:

CC                file2c            man               sscop
Mail              find              mandoc            ssh
addftinfo         finger            manpath           ssh-add
addr2line         flex              merge             ssh-agent
...

mas também podemos usar ls -1 e obtemos:

CC
Mail
addftinfo
addr2line
afmtodit
alias
apply
apropos
...

Uma lista com todos os nomes de arquivos, cada um deles em uma única linha. A estrutura da saída é: filename, newline ( \n ),…

Isso podemos canalizar para less : ls -1 | less .

Agora, é possível aplicar facilmente um comando à string contida na linha atual?

Como isso é feito de maneira irrelevante, apenas o número de etapas deve ser pequeno. Poderia ser usando ! em menos (isso não parece possível?) Ou por de alguma forma obtendo a string contida na linha atual em uma variável de shell, etc.

No Xorg, isso é fácil, apenas usando a pasta do botão do meio do mouse. Mas no modo texto, pode fazê-lo de uma maneira não muito complicada?

    
por wolf-revo-cats 27.09.2017 / 10:21

2 respostas

1

Você pode usar o | command para enviar parte do arquivo por meio de outro programa, mas essa parte é sempre pelo menos duas linhas. Você pode cortá-lo junto com marcas e tail , embora:

  1. Com a linha que você quer no topo, pressione m a (ou qualquer outra letra para o segundo).
  2. Rola uma linha para cima com k ou para cima .
  3. Pressione | e a letra que você escolheu no lugar de a acima.
  4. Digite tail -n 1 | ... , em que ... é qualquer comando que receberá uma linha como sua entrada padrão.

tail -n 1 nos dará apenas a segunda linha, que é a que mais nos interessa. ... obtém essa linha para fazer o que quiser.

Se você quiser usar a linha como um argumento para um comando em vez da entrada padrão, você pode usar xargs ou outro wrapper :

tail -n 1 | xargs ls -l

Se esse comando exibir algo, ele não permanecerá visível na tela, mas você poderá canalizá-lo para less novamente:

tail -n 1 | xargs ls -l | less

Este será um less aninhado: você o fecha e volta ao original less e pode repetir o processo.

Se o comando é interativo de alguma forma, como um editor de texto, e não gosta de ter sua entrada padrão como um pipe ou null, você pode usar um sh processo no meio para executar o comando e reabrir o tty:

xargs sh -c 'vim "$@" < /dev/tty' sh

O BSD xargs também tem uma opção -o para fazer a mesma coisa.

    
por 27.09.2017 / 10:45
1

Uma maneira de conseguir isso seria:

  1. Mova para o início de seleção desejado (por exemplo, procurando por ele).
  2. m seguido por alguma letra, digamos X para definir a marca.
  3. Mover para o final da seleção.
  4. | X (isso irá mudar para ! prompt, onde você deve escrever um comando que receberá a seleção no stdin.
  5. Digite o comando e pressione RET
por 27.09.2017 / 10:45

Tags