If I copy a table from popular tutorialspoint.com site and paste it in a text file, the formatting gets severely disturbed. For example, the table at https://www.tutorialspoint.com/lua/lua_operating_system_facilities.htm becomes following:
Sr.No. Library / Method & Purpose
1
os.clock ()
Returns an approximation of the amount in seconds of CPU time used by the program.
2
os.date ([format [, time]])
Returns a string or a table containing date and time, formatted according to the given string format.
3
os.difftime (t2, t1)
Returns the number of seconds from time t1 to time t2. In POSIX, Windows, and some other systems, this value is exactly t2-t1.
4
os.execute ([command])
This function is equivalent to the ANSI C function system. It passes command to be executed by an operating system shell. Its first result is true if the command terminated successfully, or nil otherwise.
5
os.exit ([code [, close])
Calls the ANSI C function exit to terminate the host program. If code is true, the returned status is EXIT_SUCCESS; if code is false, the returned status is EXIT_FAILURE; if code is a number, the returned status is this number.
6
os.getenv (varname)
Returns the value of the process environment variable varname, or nil if the variable is not defined.
7
os.remove (filename)
Deletes the file (or empty directory, on POSIX systems) with the given name. If this function fails, it returns nil, plus a string describing the error and the error code.
8
os.rename (oldname, newname)
Renames file or directory named oldname to newname. If this function fails, it returns nil, plus a string describing the error and the error code.
9
os.setlocale (locale [, category])
Sets the current locale of the program. locale is a system-dependent string specifying a locale; category is an optional string describing which category to change: "all", "collate", "ctype", "monetary", "numeric", or "time"; the default category is "all". The function returns the name of the new locale, or nil if the request cannot be honored.
10
os.time ([table])
Returns the current time when called without arguments, or a time representing the date and time specified by the given table. This table must have fields year, month, and day, and may have fields hour (default is 12), min (default is 0), sec (default is 0), and isdst (default is nil). For a description of these fields, see the os.date function.
11
os.tmpname ()
Returns a string with a file name that can be used for a temporary file. The file must be explicitly opened before its use and explicitly removed when no longer needed.
How can I reformat this for easy reading using Regex in Vim? I tried following:
%s/\n\n/\t/g | %s/ \t\t/\t/g
But it gives all in one line. How can I get better display, e.g. in following format:
1<tab>function_name(arguments)
<tab>function description
2<tab>function_name(arguments)
<tab>function description
Thanks for your help.
These substitutions seem to do a reasonably good job:
:%s/^\(\d\+\)\s*\n\n/\r\1\t
:%s/^\D/\t&
Search part:
^ anchor the search to the beginning of the line
\(\d\+\) capture group #1 consisting of 1 or more digits
\s* 0 or more whitespace characters
\n\n two newline characters
Replace part:
\r a newline character (\n in search, \r in replace)
\1 capture group #1
\t a tab character
Search part:
^ anchor the search to the beginning of the line
\D a non-digit character
Replace part:
\t a tab character
& the matched text
--- EDIT ---
A working command to perform those substitutions on the whole buffer (and disables hlsearch
):
:command! COMMANDNAME %s/^\(\d\+\)\s*\n\n/\r\1\t/ | %s/^\D/\t&/ | nohlsearch
Note that the canonical syntax of a substitution is:
s<separator>search<separator>replace<separator>[flags]
While it is possible to omit some of those elements in one-off commands:
:s/foo/bar
:s/foo/
:s/foo
the last separator is necessary if you want to follow your substitution with another command.
A variant that works on the current selection if applicable or the whole buffer:
:command! -range=% COMMANDNAME <line1>,<line2>s/^\(\d\+\)\s*\n\n/\r\1\t/ | '[,']s/^\D/\t&/ | nohlsearch
See :help command-range
for -range=%
and :help '[
.