No vim, como posso mover o texto para certas colunas?

1

Eu tenho arquivos de texto de poemas com números de linha à direita que se parecem com isso:

Bedded in store of rotten fig-leaves soft,   40
And corded up in a tight olive-frail,   
Some lump, ah God, of lapis lazuli, 
Big as a Jew’s head cut off at the nape,    
Blue as a vein o’er the Madonna’s breast    
Sons, all have I bequeathed you, villas, all,        45

Onde os espaços entre as extremidades das linhas e os números de linha não são consistentes. Como posso mover os números para uma coluna específica, para que eles se alinhem?

    
por Jon 23.02.2012 / 20:59

3 respostas

3

Um método poderoso para resolver problemas com o vim é usar macros e comandos elementares, porque são mais fáceis de lembrar do que a linguagem de script vim.

Nesse caso, colocaria o cursor antes do número, que é a última palavra na linha (para fazer isso: $b ); insira muitos espaços; remova os estranhos (se você quiser usar a linha 61, faça: 061ldw ); vá para a próxima linha (para fazer isso: j ).

Primeiro você pressiona qa para iniciar a gravação da macro "a", depois pressione essas teclas acima (e nenhuma outra) e pressione q para finalizar a gravação. Agora, para usá-lo, use @a para a macro "a"; depois disso, continue pressionando @@ (repete a última macro) até chegar ao final do texto.

    
por 23.02.2012 / 21:19
5

Eu queria alcançar basicamente o mesmo, mas para certos caracteres no código do software. Os caracteres podem aparecer em qualquer lugar na linha, mas eu queria que eles (e qualquer coisa à direita deles) aparecessem em uma coluna específica. Por exemplo:

refclkp : in std_logic;
refclkn : in std_logic;
hdinp_ch0 : in std_logic;
hdinn_ch0 : in std_logic;
hdoutp_ch0 : out std_logic;

Eu queria que fosse assim:

refclkp                    : in std_logic;
refclkn                    : in std_logic;
hdinp_ch0                  : in std_logic;
hdinn_ch0                  : in std_logic;
hdoutp_ch0                 : out std_logic;

Ou seja. com todo o : em uma coluna específica (coluna 30 neste caso). O acima não fazia sentido para mim (pode funcionar, mas eu não uso o visual), mas me deu a pista para resolvê-lo:

:map H $?:<ctrl+Enter>Di                              <ctrl+Esc>029lP:s/\s*$//<ctrl+Enter>

Você faz o <ctrl+Enter> e <ctrl+Esc> bits segurando Ctrl + Q e pressionando Enter ou Esc . Aparece no comando como ^M ou ^[ . O acima essencialmente faz isso:

  1. Ir para o final da linha ( $ )
  2. olhar para trás no primeiro ":" ( ?:<ctrl+Enter> )
  3. Exclua tudo deste ponto até o final da linha ( D )
  4. Insira 30 espaços - isso é para que eu saiba que há espaço em branco suficiente para permitir que eu pule para a coluna 30 ( i <ctrl+Esc> )
  5. Ir para a coluna 30 - não tenho certeza porque preciso usar '29' aqui, deve ser um 'recurso' ( 029l )
  6. Cole o texto excluído da etapa 3 ( P )
  7. Limpe excluindo todos os espaços em branco finais criados na etapa 4 ( :s/\s*$//<ctrl+Enter> )

Eu criei isso como um mapeamento, então tudo que eu preciso fazer agora é H e a linha atual é modificada!

    
por 13.11.2012 / 12:42
0

O outro método para este tipo de alinhamento de colunas é assim:

vamos pegar o exemplo acima,

antes:

refclkp : in std_logic;
refclkn : in std_logic;
hdinp_ch0 : in std_logic;
hdinn_ch0 : in std_logic;
hdoutp_ch0 : out std_logic;

depois:

refclkp       : in std_logic;
refclkn       : in std_logic;
hdinp_ch0     : in std_logic;
hdinn_ch0     : in std_logic;
hdoutp_ch0    : out std_logic;

Aqui, alinhei o caractere ": " na 15ª coluna. Para fazer isso, siga as etapas abaixo:

  1. Vá para a primeira linha (onde precisamos iniciar as alterações, aqui está " refclkp: in std_logic; ")

  2. Em seguida, pressione a tecla <Esc> para ir para o modo normal

  3. Pres essas chaves

    qa0f:i (Press the space bar more than 20 times)<Esc>15|dw<DownArrow>q

  4. Em seguida, pressione 4@a para repetir o mesmo para as 4 linhas restantes.

(Aqui os espaços mais de 20 são para o nosso lado seguro podem mudar de acordo com sua exigência)

    
por 24.09.2014 / 06:28

Tags