Delete a specific Column in VIM/gvim with out using Visual Block mode
vim
Solution
In command mode:
:%s/^\([[+|][^+|]\+\)[+|][^+|]\+/\1/
This uses vim's built-in sed-like search and replace command. Here's the breakdown:
`%` - for the entire file
`s` - search for
`/^` - the start of line
`\([[+|][^+|]\+\)` - followed by `+` or `|`, followed by any number (`\+`) of anything that is not `+` or `|`. This will get the first column, which we want to keep, so put it in a capture group by surrounding it with `\(` and `\)`
`[+|][^+|]\+` - followed by `+` or `|`, followed by any number (`\+`) of anything that is not `+` or `|`. This will get the second column, which we don't want to keep, so no capture group.
`/\1/` - replace everything we matched with the first capture group (which contains the first column). This effectively replaces the first and second column with the contents of the first column.
Like I said, vim's regex are pretty much identical to sed, so you if you look through this tutorial on sed you'll probably pick up a lot of useful stuff for vim as well.
Edit
In response to the OP's request to make this more generally capable of deleting any column:
:%s/^\(\([[+|][^+|]\+\)\{1\}\)[+|][^+|]\+/\1/
The index inside of the `\{\}`, now deletes the column indicated. Think of it like an array index (i.e. starts at zero). So `\{0\}` now deletes the first column, `\{1\}` deletes the second, and so on.
Problem
Sample Input File ``` +--------------------+---------+--------- | Name | S1 | S2 +--------------------+---------+--------- | A | -4.703 | -2.378 | B | -3283.2 | -3204.5 | C | 8779 | 7302 | D | 22078 | 18018 +--------------------+---------+--------- ``` It is required to remove the S1 Column, i.e Desired Output ``` +--------------------+--------- | Name | S2 +--------------------+--------- | A | -2.378 | B | -3205.5 | C | 7302 | D | 18018 +--------------------+--------- ``` Can anyone help with this thanks