当前位置:  开发笔记 > 编程语言 > 正文

我可以在Vim中转置文件吗?

如何解决《我可以在Vim中转置文件吗?》经验,为你挑选了3个好方法。

我知道我可以使用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先生的答案如下.



1> Mykola Golub..:

这是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转置当前缓冲区



2> Charles Duff..:

Vim支持内置的许多脚本语言 - 以Python接口为例.

只需vim.current.buffer适当修改就可以了.

更具体一点:

function! Rotate()
python <



3> seanhodges..:

如果脚本不为您执行此操作,则可以将操作记录到寄存器(为了便于阅读,添加了回车符):

qa
1G0
xGop
1G0j
xGp
q

这将为您提供一个可以针对上面的示例运行的宏,或者任何相同长度的2行字符串.您只需要知道字符串的长度,这样就可以在正确的时间内迭代操作

16@a

一个相当基本的解决方案,但它有效.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有