簡單的文本編輯的Vim: http://vimgolf.com/challenges/4d1a34ccfa85f32065000004VimGolf挑戰「Vim簡單文本編輯」:#1解決方案如何工作?
我很難理解#1溶液(分數13)。
對不起,這篇文章沒有貼上解決方案,因爲我不知道這樣做是否合適。
簡單的文本編輯的Vim: http://vimgolf.com/challenges/4d1a34ccfa85f32065000004VimGolf挑戰「Vim簡單文本編輯」:#1解決方案如何工作?
我很難理解#1溶液(分數13)。
對不起,這篇文章沒有貼上解決方案,因爲我不知道這樣做是否合適。
該解決方案集中在:g
命令上。從幫助:
:g :global E147 E148
:[range]g[lobal]/{pattern}/[cmd]
Execute the Ex command [cmd] (default ":p") on the
lines within [range] where {pattern} matches.
所以基本上,該解決方案執行有一個「V」, 這正是需要編輯的那些線路上的一些前的命令。您可能注意到早期的解決方案依賴於複製這些行,而不是真正改變它們。該解決方案特別顯示了一個有趣的現象:
3jYjVp3jYjVp3jYjVpZZ
^ ^ ^
它是用宏觀減少:
[email protected]
使用:g
命令基本上做同樣的事情的解決方案。執行的第一個 命令是t.
。從幫助:
:t
:t Synonym for copy.
:[range]co[py] {address} :co :copy
Copy the lines given by [range] to below the line
given by {address}.
給出的地址爲.
,這意味着當前行:
Line numbers may be specified with: :range E14 {address}
{number} an absolute line number
. the current line :.
$ the last line in the file :$
% equal to 1,$ (the entire file) :%
't position of mark t (lowercase) :'
'T position of mark T (uppercase); when the mark is in
another file it cannot be used in a range
/{pattern}[/] the next line where {pattern} matches :/
?{pattern}[?] the previous line where {pattern} matches :?
\/ the next line where the previously used search
pattern matches
\? the previous line where the previously used search
pattern matches
\& the next line where the previously used substitute
pattern matches
所以ex命令t.
意味着「複製當前行到當前線下」。 然後,有一杆,它:
:bar :\bar
'|' can be used to separate commands, so you can give multiple commands in one
line. If you want to use '|' in an argument, precede it with '\'.
而d
命令,這顯然會刪除該行。它的範圍是 +
,意思是「當前行+1」。您可以通過.+1
,但簡稱爲+
。 可以讀取這些信息圍繞幫助:range
:
The default line specifier for most commands is the cursor position, but the
commands ":write" and ":global" have the whole file (1,$) as default.
Each may be followed (several times) by '+' or '-' and an optional number.
This number is added or subtracted from the preceding line number. If the
number is omitted, 1 is used.
就是這樣。
:g/V/t.|+d<CR>ZZ
在每一個有一個「V」行,把它複製下來,並刪除下一行。寫 並退出。我沒有提到
一件事就是爲什麼:g
命令執行三次,而不是6個或更多(線沿的過程中複製)。 :g
命令開始將光標定位到第一行,並下降到$。但是如果這些命令改變當前行,則:g
將從那裏繼續。所以:
:g/V/
當前行是4。現在:
t.
這將光標移動到第5行。然後:
+d
刪除第6行,將光標停留在5所以接下來:g
比賽將在8行
+1即使我看不懂問題也很好的解釋。 :) –
謝謝@Xavier T.問題應該對每個人都可見,只需按照問題中提供的鏈接。 – sidyll
你是對的,我可以看到開始/結束的狀態! –
這個問題有一個問題:沒有人能夠看到#1的解決方案(除非他們在vimgolf註冊,像我一樣)。同時,你爲什麼不一步一步地嘗試 – sehe