linha de comando vi, linha goto e coluna


17

Venho misturando o uso de emacse vi( vim) há muito tempo. Cada um deles tem sua vantagem. Analiso a saída de erro de uma compilação como processo e obtenho um número de linha e coluna, mas só posso usar emacspara ir diretamente para uma linha e coluna:

emacs +15:25 myfile.xml

com viEu só tenho o número da linha (de acordo com a página do manual)

vi +15 myfile.xml

Existe uma opção para posicionar o cursor em um padrão ( vi +/pattern myfile.xml) que eu nunca consegui trabalhar. Mas isso não me ajudaria, pois o padrão nem sempre é a primeira ocorrência no arquivo.

Como posso começar vipara ir para a coluna 25 na linha 15 do meu arquivo? Posso fazer algo com -copção?


3
Desde você marcou vim, você considerou o quickfixsistema, que executa o compilador de dentro vim, analisa a saída de erro, preenche uma lista de erros (Navegar com :cp, :cn, :clcomandos), e posiciona o cursor no primeiro?
Random832

Se você abrir um arquivo em vi, e digite :15ele irá saltar para a linha 15 .. Espero que isso ajude você
código ninja

Respostas:


17

Você pode usar:

vi '+normal 15G25|'  myfile.xml

2
explicação: a maioria dos comandos (ou seja, a maioria das letras) no vi pode ser precedida por um número (ou intervalo) para alterar seu comportamento padrão ou repeti-lo (ou aplicá-lo em um intervalo específico). Dentro do vi, no modo de comando, você pode fazer 15Gpara ir para a linha 15 e 25|para a coluna 25. E Christa mostra como fazer o mesmo na linha de comando.
Olivier Dulac

7

Com o plug-in de linha de arquivo , você pode simplesmente acrescentar linha e coluna ao nome do arquivo, tanto ao invocar o Vim quanto ao interior com comandos como :edit:

vim myfile.xml:15:25

É bom saber que isso existe, mas acho que vou usar uma resposta que não exija plug
Dominique

@Dominique Você também pode criar vim myfile.xml +15linhas sem um plug-in, mas não colunas, tanto quanto eu sei #
Izkata

5

apenas por diversão, existe o -c 'normal 14j24l'que o colocará na linha 15, personagem 25


4

Não sei sobre a -copção, mas você deve ser capaz de:

vi '+cal cursor(15,25)' myfile.xml

(certifique-se de citar por causa dos parênteses ())


cursor()usa índice de bytes para a coluna, mas geralmente é uma contagem de caracteres.
Ingo Karkat

@IngoKarkat Isso realmente importa? O texto é UTF-8.
Dominique

2
É importante para caracteres não ASCII, representados por mais de um byte. Além disso, uma guia e caracteres de controle geralmente ocupam mais de uma coluna de exibição.
Ingo Karkat

2

Vale nada:

-c command 

Execute o comando ex fornecido na inicialização. Somente uma opção -c é permitida para vi ; O Vim aceita até 10. Uma forma mais antiga dessa opção +command,, ainda é suportada.

O +commandtem a mesma ex commandlimitação única ao usar vi.

O +/patterntambém é limitado a um comando com vi.

(retirado do vim e ex editor )


1

Você pode adicionar o seguinte código ao seu vimrc. Ao retornar ao seu arquivo, o vim volta automaticamente à posição antiga:

if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.