Como você usa o VIM para editar dados tabulares (tabelas)? Especificamente, BIND (nomeado) arquivos DNS db

5

Eu geralmente sou purista quando se trata de vimming. Eu não gosto de remapear chaves, ou de aprender a confiar em um monte de plugins. Eu gosto de me sentir tão poderosa em boxe estrangeiro quanto na minha caixa de dev. Eu, no entanto, acredito em arquivos de sintaxe. Mesmo que a solução possa não ser um arquivo de sintaxe (bindzone.vim é o que eu uso), eu quero que seja ruim o suficiente para fazer qualquer coisa.

Eu visualizo ou edito regularmente a guia (ou vírgula, mas isso seria um bônus) de dados delimitados. Eu odeio ter que definir meu tabstop para algum número ridículo, a fim de ter tudo alinhar. Exemplo: Os arquivos da zona BIND são ~ 40 +, 6,2,5,15 +. Então, mesmo que eu possa vê-los em uma única tela, se eu definir ts = 40, não posso. Tenho procurado por uma solução de "tamanho de tabulação dinâmica" há anos, mas sem sorte.

Eu odeio que a minha única boa maneira de editar ou até mesmo visualizar dados tabulares é scp-lo para o meu posto de trabalho e abri-lo no Open Office. Tem que haver uma maneira melhor.

    
por Bruno Bronosky 15.06.2009 / 17:35

6 respostas

1

Arquive uma solicitação de recurso. O VIM precisa de uma opção para exibir várias paradas de tabulação, como é comum em todos os processadores de texto. Muitas pessoas usam o vim como um processador de texto, estou surpreso que isso não esteja lá. Eu estou propondo que o tabstop seja modificado para aceitar um array no lugar de um inteiro.

    
por 23.06.2009 / 15:31
1

Que tal mudar para espaços em vez de separadores e usar apenas R (em vez de i) para editar? Dessa forma, você não vai realinhar nada (exceto no primeiro momento em que você reescreve tudo).

    
por 22.06.2009 / 19:09
1

Existe um patch da dev-list para o Vim que é dito para implementar paradas de tabulação variáveis. É indicado {1} como estando em fase beta.
Obviamente, isso envolveria a compilação do vim para o (s) servidor (es) em que você deseja usá-lo.

Outra opção seria configurar um tipo de arquivo personalizado que traduza guias em espaços delimitados por algum caractere especial. Você pode configurar autocommands para disparar uma rotina de importação (ou seja, converter para colunas delimitadas) em leitura e uma rotina de exportação (para converter de volta a delimitação de tabulação) na gravação, para que ela funcione de maneira mais ou menos transparente. Então, por exemplo, o arquivo

Column 1 header\tColumn 2 header\tcolumn 3 header
first row, column 1\tfirst row, column 2\tfirst row, column 3

seria visto no vim como algo como

Column 1 header»     «Column 2 header»     «Column 3 header
first row, column 1» «first row, column 2» «first row, column 3

Isso está mais ou menos no topo da minha cabeça; pode haver um pacote vimscript que implemente isso. Se não, não seria tão difícil de escrever. Você só precisa se certificar de que os caracteres delimitadores de coluna --here "" "e" «" - não sejam realmente usados no arquivo. Para um arquivo de configuração de ligação, eu pensaria que qualquer coisa não-ASCII seria segura. Para melhorar a robustez, eu acho que você poderia dar ao vim algumas opções, e fazer com que ele escaneie o arquivo para encontrar um conjunto que não estava presente no arquivo, ou simplesmente escape de qualquer um desses caracteres.

Pode ser melhor, em vez disso, preencher com caracteres que se parecem com espaços {2}, mas não são como "\ xa0" ou "\ u2002"; novamente isso só funcionaria corretamente se o caractere de preenchimento não estivesse presente no arquivo, ou se você estiver fazendo com que a rotina de importação escape daqueles que estão. Além disso, estou assumindo familiaridade com o backquoting de estilo c: na primeira parte do exemplo, "\ t" representa um caractere de tabulação; as sequências \ xe \ u são representações de caracteres hexadecimais e unicode.

Se você acabar implementando ou encontrando algo assim, por favor me avise.

{1}: http ... groups.google.com/group/vim_dev/web/vim-patches?pli=1
{2}: http ... www.cs.tut.fi/~jkorpela/chars/spaces.html
NB: estilo de referência da velha escola ofuscado é devido à minha falta de reputação neste site.

    
por 14.03.2010 / 13:35
0

Acho que você pode conseguir o que deseja usando o Alinhar plug-in . (Desculpas se você já tentou isso.)

    
por 15.06.2009 / 17:44
0

Você sabia que é capaz de definir automaticamente as propriedades personalizadas nos arquivos definindo uma modelagem personalizada? Percebo que isso não resolve seu problema, mas evita que você precise inserir suas propriedades personalizadas sempre que quiser alinhar seu arquivo.

  • adicione ao topo do seu arquivo '# vi: ts = 40'
  • e lembre-se de 'definir modeline' no seu .vimrc

Isso funciona no vi também ...

    
por 16.06.2009 / 03:43
0

Um monte de respostas não inteiramente ao ponto, mas talvez algumas delas se ajustem de alguma forma a seus padrões de trabalho:

Tenha um:%! sed -e 'whatever' que faça o que você precisa e coloque em um comentário em algum lugar do arquivo para que você possa colá-lo (usei:%! sort -u em um arquivo de bind para este tipo de coisas).

Se for o mesmo servidor o tempo todo, tenha um script (bash | perl | awk | sed) em algum lugar nele que possa ser chamado de forma similar no vim.

O comando: make também é útil se você puder colocar um makefile lá.

Guarde todos os dados em SQL e gere os arquivos a partir dali, enquanto edita certas tabelas ou views (estou apenas brincando).

Use os comandos cut (1) e paste (1) (de dentro do vim ou de um shell script auxiliar) para emular as views SQL.

Nenhuma dobra vertical no vim é possível até onde eu sei, mas o block-select (com ctrl-V) é freqüentemente útil.

Macros!

    
por 17.06.2009 / 11:48