Reputation: 94810
Vim is pretty powerful when editing by line - the search/replace tools are modeled to work linewise.
But what if I want to change a particular column across all lines? For example, how can I change the 80th column in my file to a #
easily?
Upvotes: 87
Views: 120837
Reputation: 3367
...I couldn't follow the steps of sa125 (facepalm) so I looked someplace else and found a simpler explanation at: https://blog.pivotal.io/labs/labs/column-edit-mode-in-vi
*c without Shift can be used instead of step 2, to delete selection before insert. And also r to replace.
**!! Attention Don't be discouraged by the fact that only the first row is changed when you 'write whatever...'!!
Hope it helps!
Upvotes: 61
Reputation: 181
To remove all #
in the example below.
ctrl + v
at #
: (Visual Block) mode#
s using arrow down or j
x
to remove all #
s# a
# b
# c
# d
# e
# f
Esc
to escape from editing a
b
c
d
e
f
Upvotes: 1
Reputation: 28971
To edit a column, follow these steps:
I think people (me) sometimes map the column editing keys to Ctrl+Q so it won't collide with visual select line (V) or paste-text if you mapped it as such.
Upvotes: 175
Reputation: 10264
For column-wise editing, vis.vim is really useful. You can block-select your column of interest, and manipulate it with normal commands, and even arbitrary Ex commands. From the example on that page, I have often used the pattern:
:'<,'>B s/abc/ABC/g
You can Vundle/Pathogen install vis.vim from github:
Plugin 'taku-o/vim-vis'
Upvotes: 1
Reputation: 141780
You can use a substitution where the pattern matches a specific column (\%c
):
:%s/\%80c/#/<CR>
Or you can use block-wise visual mode:
gg80|CTRL+vGr#
The 'virtualedit
' option can be used to allow positioning the cursor to
positions where there is no actual character:
:set virtualedit
Upvotes: 45
Reputation: 3470
I may be totally off topic here, but if your idea is to avoid long lines, you could have a look at the colorcolumn option of vim 7.3.
Upvotes: 1