[VimGolf] 在每一个非空行的行尾添加一个 ;
这个题目好像和上一个(prepend * to every non-blank line)没什么区别。
题目链接
题目说明
在每一个非空行的行尾添加一个 ;
。
开始文件
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 分,但这个要通用很多,不依赖特定文件格式,不用看哪里有空行,也不用看每行最后一个字符是否一样。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。