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!