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>