我知道我可以使用AWK,但我在Windows机器上.我正在为可能没有AWK的其他人提供功能.我也知道我可以写一个C程序,但我不想为我正在制作的一个小Vim实用程序创建维护和编译.
原始文件可能是
THE DAY WAS LONG THE WAY WAS FAST
它会成为
TT HH EE DW AA YY WW AA SS LF OA NS GT
更新:高尔夫规则适用于选择正确的答案.
更新:Python粉丝应该看看Duffy先生的答案如下.
这是Vim语言中的命令.所以你不必用+ python支持编译Vim.
function! s:transpose() let maxcol = 0 let lines = getline(1, line('$')) for line in lines let len = len(line) if len > maxcol let maxcol = len endif endfor let newlines = [] for col in range(0, maxcol - 1) let newline = '' for line in lines let line_with_extra_spaces = printf('%-'.maxcol.'s', line) let newline .= line_with_extra_spaces[col] endfor call add(newlines, newline) endfor 1,$"_d call setline(1, newlines) endfunction command! TransposeBuffer call s:transpose()
把它放在vim/plugin dir中新创建的.vim文件中,或者把它放到你的[._] vimrc中.
执行:TransposeBuffer
转置当前缓冲区
Vim支持内置的许多脚本语言 - 以Python接口为例.
只需vim.current.buffer
适当修改就可以了.
更具体一点:
function! Rotate() python <
3> seanhodges..:如果脚本不为您执行此操作,则可以将操作记录到寄存器(为了便于阅读,添加了回车符):
qa 1G0 xGop 1G0j xGp q 这将为您提供一个可以针对上面的示例运行的宏,或者任何相同长度的2行字符串.您只需要知道字符串的长度,这样就可以在正确的时间内迭代操作
16@a一个相当基本的解决方案,但它有效.