Jump to content

User:Ta bu shi da yu/Useful vim commands

From Wikipedia, the free encyclopedia

I found that I wanted to add a w: to wikilinks to get articles ready for transwikification. This took too long. I also happen to like vim. Here's what I came up with to automate this task.

If none of this makes any sense, it's actually not that hard. I'm just using vim's search and replace facility coupled with inbuilt regular expressions. If you don't want to be bothered with the nitti-gritty, just copy and paste the global search and replace lines directly into vim using the mouse buffer. Simple!

Ta bu shi da yu 04:23, 31 Oct 2004 (UTC)

Using global search and replace

[edit]

AlanBarrett pointed out that there is, in fact, a much simpler way of doing this: :g/\[\[[^|]\{-}\]\]/s/\[\[\([^|]\{-}\)\]\]/[[w:\1|\1]]/g :g/\[\[[^w][^:].\{-}|.\{-}\]\]/s/\[\[[^w][^:]\(.\{-}\)|\(.\{-}\]\]\)/[[w:\1|\2/g


[edit]

In vim:

  • to find all wikilinks that aren't piped, use:
/\[\[[^|]\{-}\]\]
  • to do a search and replace for all wikilinks, on a single line, that aren't piped, to prepare for convertion to Wikisource, etc, use
:s/\[\[\([^|]\{-}\)\]\]/[[w:\1|\1]]
  • to record and use a macro that does this for all lines, use:
qa
/\[\[[^|]\{-}\]\]
:s/\[\[\([^|]\{-}\)\]\]/[[w:\1|\1]]
q
100@a
    • q is not a vi command (it's not in nvi). It's probably a vim command, and I assume that qa...q means "place '...' into buffer a". In vi, to place two lines of stuff into buffer a, you have to first put those lines into a file, and then cut them into buffer a with "a2dd. —AlanBarrett 09:28, 31 Oct 2004 (UTC)
      • Yep, Alan is correct about the fact I'm not using vi. I'm using vim (never used vi before!). The q command starts recording a macro however. - Ta bu shi da yu 12:15, 31 Oct 2004 (UTC)
    • To do a search and replace on every line that matches a regular expression, use :g/pattern/s/old/new/g. For example, :g/\[\[[^|]\{-}\]\]/s/\[\[\([^|]\{-}\)\]\]/[[w:\1|\1]]/g. There's no need for macros when :g will do it all in a single command. —AlanBarrett 09:37, 31 Oct 2004 (UTC)
      • Ah! so that's how to use the global command. - Ta bu shi da yu 12:15, 31 Oct 2004 (UTC)
[edit]

In vi:

  • to find all wikilinks that are piped, use:
/\[\[.\{-}|.\{-}\]\]
  • to find all wikilinks that are piped, but haven't had a w: appended to the start, use:
/\[\[[^w][^:].\{-}|.\{-}\]\]
  • to do a search and replace for all wikilinks, on a single line, that are piped (to prepare for conversion to Wikisource, etc), use:
:s/\[\[[^w][^:]\(.\{-}\)|\(.\{-}\]\]\)/[[w:\1|\2
  • to record and use a macro that does this for all lines, use:
qa
/\[\[[^w][^:].\{-}|.\{-}\]\]
:s/\[\[[^w][^:]\(.\{-}\)|\(.\{-}\]\]\)/[[w:\1|\2
q
100@a

Combine them together and you get an ugly hack method

[edit]

Ugh. Global search and replace is much nicer! But this does demonstrate how to use macros in vim.

qa
/\[\[[^|]\{-}\]\]
:s/\[\[\([^|]\{-}\)\]\]/[[w:\1|\1]]
q
100@a
qb
/\[\[[^w][^:].\{-}|.\{-}\]\]
:s/\[\[[^w][^:]\(.\{-}\)|\(.\{-}\]\]\)/[[w:\1|\2
q
100@b