Mám řádky jako
abcdefgjoin!
abcdef
no join
abcdefgjoin!
Pokud řádek odpovídá regulárnímu výrazu ^a.+g$
pak bych chtěl, aby se spojili, takže by to bylo:
abcdefgjoin!
abcdef
no join
abcdefgjoin!
Existuje způsob, jak to udělat ve VIM
?
Přijatá odpověď:
V normálním režimu J
(na rozdíl od j
, který přesune kurzor o jeden řádek dolů) se používá ke spojení řádku s řádkem přímo pod ním. Ve výchozím nastavení však přidá na konec prvního řádku mezeru; abyste získali požadovaný výsledek (spojení řádků bez vložení další mezery), museli byste použít gJ
.
Chcete-li použít příkazy normálního režimu v ex-režimu (které zadáte stisknutím :
v normálním režimu), musíte použít normal
příkaz. Viz :h normal
uvnitř vim. Chcete-li tedy pracovat s dalším řádkem, který odpovídá vzoru, jeden by použil (všimněte si, že ve výchozím nastavení musíte znak +
ukončit aby to fungovalo s regulárním výrazem vim, což je důsledek zachování kompatibility se starodávným motorem regulárních výrazů původního vi):
:/^a.\+g$/normal gJ
Chcete-li pracovat na vždy řádek, který odpovídá vzoru, použijete :global
příkaz (viz :h :g
v rámci vim) takto:
:global/^a.\+g$/normal gJ
Nebo stručněji:
:g/^a.\+g$/norm gJ
Je také možné použít ex příkaz join
(viz :h :join
), abyste dosáhli stejné věci s o něco méně psaním (!
na konci v tomto případě říká join
nevkládat mezeru na konec prvního řádku).
:g/^a.\+g$/join!