Abra o arquivo com o vim iniciado de fora (no terminal)

4

Eu iniciei vim . Eu o suspendi ( Ctrl + Z ). Então eu estava na sessão do terminal e gostaria de abrir algum arquivo com a mesma vim session (nova aba). Eu posso abrir o arquivo na nova vim session. Na verdade, o caminho para o arquivo pode ser construído. Por exemplo ,

vim 'find $PWD -name build.xml'

É possível abrir este arquivo dentro da sessão vim em execução a partir da sessão de terminal de hospedagem?

    
por Loom 30.11.2015 / 15:24

3 respostas

8

O problema com o Ctrl - Z

Quando você suspende um processo com Ctrl - Z , o processo recebe um sinal SIGTSTP , e toda a execução será interrompida (ou seja, sem mais ciclos de CPU), até que um sinal SIGCONT apareça. Você não poderá enviar vim de nenhum comando ou entrada enquanto estiver suspenso.

Em outras palavras, não use Ctrl - Z .

No entanto, se você tiver vim compilado com o recurso clientserver ativado, poderá usar as opções --servername e --remote-* :

Use vim --remote

Ao iniciar sua vim sessão pela primeira vez, use vim --servername VIM [filename ...] (o nome do arquivo é opcional se você quiser começar com uma sessão em branco).

Deixe em execução no seu terminal. Agora você pode controlá-lo a partir de qualquer outra janela de terminal, aba, máquina, etc., através dos comandos vim --remote . Para abrir um arquivo (por exemplo, arquivo.txt em uma nova guia da sessão vim existente:

vim --remote-tab file.txt

Para usar a funcionalidade vim interna de :tabfind (consulte :help find para obter mais informações):

vim --remote-send ":tabfind filename.txt<CR>"

Para usar o programa find(1) do seu sistema, como você fez na sua pergunta:

vim --remote-tab 'find $PWD -name build.xml'

Múltiplas sessões

Você também pode especificar um --servername diferente, o que é útil se você quiser várias sessões vim. Nesse caso, você precisa fornecer o argumento --servername sempre:

vim --servername HAMBURGER # Start new session named "HAMBURGER"
vim --servername HAMBURGER --remote-tab 'find $PWD -name BACON'

É claro que você pode colocar tudo isso em um shell ou dois para economizar alguma digitação.

    
por 30.11.2015 / 15:58
4

De dentro de vim você pode usar:

:tabe 'find $PWD -name build.xml'
    
por 30.11.2015 / 15:36
2

Embora as outras respostas pareçam mais claras para mim, como um hack, você poderia usar uma função como:

for-vim () {
  printf %s "$@" > ~/.for-vim &&
    perl -le 'require "sys/ioctl.ph"; ioctl(STDIN, &TIOCSTI, $_)
     for split "", "\e:tabe 'cat ~/.for-vim'\r"' &&
    fg %vim
}

Para ser usado como:

for-vim "$(find "$PWD" ...)"

Ele armazena o caminho do arquivo em um arquivo ~/.for-vim e injeta <ESC>:tabe ~/.for-vm<CR> no buffer de entrada do terminal usando o TIOCSTI ioctl () antes de retomar vim .

    
por 30.11.2015 / 16:16

Tags