这个题目好像和上一个(prepend * to every non-blank line)没什么区别。

题目链接

Add semicolons

题目说明

在每一个非空行的行尾添加一个 ;

开始文件

 super.onCreate(savedInstanceState)
 setContentView(R.layout.activity_second)
 Intent intent = getIntent()
 String text = intent.getStringExtra("text")

 TextView view = findViewById(R.id.textView2)
 view.setText(text)

结束文件

 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_second);
 Intent intent = getIntent();
 String text = intent.getStringExtra("text");

 TextView view = findViewById(R.id.textView2);
 view.setText(text);

最佳分数

10

我的分数

11

:%s/)/);<CR>ZZ

第一次尝试

直接照搬上次的方法。

:%s/.$/&;<CR>ZZ

但因为是行尾,得再加 1 分,12 分,还差 2 分。感觉这个比刚才那个还难些,也许解决方法是一样的。

再看看不一样的题目吧。

第二次尝试

想到可以根据括号来替换。

:%s/)/);<CR>ZZ

11 分,还差 1 分。

第三次尝试

感觉很难再减 1 分了,好像又进了死胡同,还是再学习一下吧。

@braxler

<C-V>G$A;<Esc><C-E>xZZ

这眼花缭乱的操作……分析下,<C-V>G 就进入列可视模式然后选择所有行的第一列,$A; 是在每一行的末尾加一个 ;,剩下的才是重点。<C-E> 是啥玩意?它不是向下滚动一行吗?怎么直接跳到了第 5 行?我用自己的 Vim 配置没重现出来,看来是 VimGolf 默认配置问题。

VimGolf's .vimrc 里边有这一行,就和它有关。

...
set scrolloff=3         " keep 3 lines when scrolling
...

加了这行之后,在文件首行按 <C-E>,就会跳到第 5 行。这个值默认是 0,也就是向下滚动 1 行,是 1 就是滚动 2 行。是 3 的话,就是滚动 4 行,也就跳到第 5 行了。这我一个人想破脑袋也想不到啊。

最佳操作

@braxler

<C-V>G$A;<Esc><C-E>xZZ

实用操作

:%s/.$/&;<CR>ZZ

12 分。

虽然多了 2 分,但这个要通用很多,不依赖特定文件格式,不用看哪里有空行,也不用看每行最后一个字符是否一样。

文章目录