我正在通过 Ctrl-v(可视模式)选择一些文本。然后我输入 \s 来对齐这些行并像这样对它们进行排序:
"Strip trailing space
:map <Leader>S :1,$ s/\s\+$//g<CR>
:imap <Leader>S :1,$ s/\s\+$//g<CR>
如何将所有选定的行传递给 Sort()。我认为 vim.current.range对象可能会这样做,但没有成功。目前,Sort() 函数通过 cr[0] 一次读取 1 行文本。我需要做的是将分割线存储在矩阵中,计算所需的长度/列并将它们打印到缓冲区中。
function! Sort()
python << EOF
import vim
cr = vim.current.range
line = cr[0]
line = line.split()
fmt_str = ['%8s' for word in line]
fmt_str = ' '.join(fmt_str)
line = tuple([word for word in line])
print(fmt_str)
cr[0]= fmt_str % line
EOF
endfunction
"Sort and align
:map <Leader>s :call Sort()<CR>