Estou tentando entender ed
um pouco melhor a DSL porque as versões dela aparecem em outras ferramentas (por exemplo sed
, , vim
).
Usando ed
é possível imprimir as próximas 4 linhas usando .,+4n
onde .,+4
é um intervalo explícito começando na linha atual e estendendo 4 linhas para baixo.
No entanto, imprimir várias linhas ao redor da atual para o contexto parece importante o suficiente para merecer um pouco de açúcar sintático.
Já existe uma abreviação para intervalos de linha em relação à linha atual ed
?
por exemplo, na transcrição abaixo .,+4n
parece bastante longo.
$ touch ~/foo
$ ed '-p* ' ~/foo
0
* 0a
1
2
3
4
5
6
7
8
9
10
11
.
* 5
5
* .,+4n
5 5
6 6
7 7
8 8
9 9
-4,+4n
imprimiria as quatro anteriores, a atual e as quatro linhas seguintes (numeradas).Outra maneira de escrever a mesma coisa, que é um pouco mais curta, é
-4z8n
. Isso aplicaria oz
comando, que é diferente dep
que ele primeiro se move para a linha endereçada (aqui-4
) e depois mostra essa linha e (aqui)8
mais linhas. On
faz as linhas numeradas. A diferença real é que, se você der o comandozn
novamente (sem números agora), ele mostrará as próximas oito linhas (ou qualquer número que você digitou após oz
comando inicial).Ambos os comandos alteram o que é considerado a "linha atual", e você teria que voltar manualmente com
-4
, ou definir uma marca antes de mover (com egka
) e depois voltar para essa marca (com eg'a
). Oed
editor não aceita vários comandos para serem dados de uma só vez, infelizmente...Observe que o
z
comando não é um comando padrãoed
, mas suportado por sistemas GNUed
eed
BSD.Com
ex
, o comando.z.5
mostraria cinco linhas do buffer atual com a linha atual no meio. Aqui também, você moveria o cursor para baixo até a última linha exibida.