VI从一行到另一行替换或删除第一个字符

时间:2014-12-18 06:40:36

标签: vim vi

在vi中,如果第一个字符是指定字符#,则如何从第一个字符替换或删除第一个字符。

line 1
...
...
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
#   fastcgi_split_path_info ^(.+\.php)(/.+)$;
#   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
#   # With php5-cgi alone:
#   fastcgi_pass 127.0.0.1:9000;
#   # With php5-fpm:
#   fastcgi_pass unix:/var/run/php5-fpm.sock;
#   fastcgi_index index.php;
#   include fastcgi_params;
#}
...
end of line

4 个答案:

答案 0 :(得分:5)

作为它的vim,有几种方法可以做到这一点。

第一个解决方案

gg4 ctrl+v gg16 x

gg4将光标移动到第8行的第一个字符(评论开始的地方)
ctrl+v切换到可视屏蔽模式,在此模式下,您可以选择文本列
gg16移动到评论区块的最后一行,选择整个第一列 x删除您选择的所有内容

第二种解决方案

:4,16s/#//
这将简单地删除第一次出现的,包括4和16之间的每一行。如果你的comment-hashes不是该行中的第一个字符,但前面有空格,那么这个命令特别有用。 / p>

第三种解决方案

是对第二个解决方案的略微修改,如果您使用相对行号(这意味着行不是递增编号,而是指示当前光标位置的偏移量),这是有用的

:.,.+5s/#//
为光标位置和光标位置下的5行之间的每一行删除

答案 1 :(得分:2)

这是您学习How to use macro?的机会。以下是步骤:

1. Place your cursor at start line
2. In normal mode type "q" followed by any letter (name of macro) (say "qa").
3. Now vim has started recording your macro.
4. Go to start of line by pressing "0"
5. Delete character under cursor by pressing "x"
6. Now go to next line by pressing "j".
7. Now press "q" to stop recording.

现在你有一个名为macro的{​​{1}}进入行首,删除该行中的第一个字符然后转到下一行。

您可以使用a后跟宏名称(在这种情况下为"@")来播放宏。您还可以使用"@a"播放上次播放的宏。

假设您要为"@@"行执行此操作。使用20运行此宏20次,所有20@a行的第一个字符将被删除。

答案 2 :(得分:1)

我这样做非常方便的是使用<ctrl-v>(可视模式)并逐行选择所需的列。然后使用x删除直观选择的字符。

您也可以在每行的开头插入字符。

答案 3 :(得分:1)

你真正想要的是评论插件,例如commentary(我使用的),Nerd CommenterEnhCommentifytComment,...,etc

如果你想跳过插件,那么你可以使用这些快速的n&#39;受评论启发的脏映射:

nnoremap <expr> gcc getline('.') =~ '^#' ? '0"_xw' : "gI#\<esc>w"
xnoremap <expr> gc ':norm! ' . (getline("'<") =~ '^#' ? '0"_x' : "gI#") . "\<cr>"