我正在通过ctrl-v(Visual Mode)选择一些文本。然后我输入 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]。我需要做的是将拆分线存储在矩阵中,计算所需的长度/列,然后将其打印到缓冲区。
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>
当您希望映射在视觉选择上使用时,需要使用:vnoremap
。然后,EX命令(例如:call
)将自动具有Visual范围'<,'>
预先备份。然后,每行一次调用一个普通函数,但是您可以定义一种处理范围本身的特殊功能(CP。:help function-range-example
)。
由于您似乎要使用Python,因此我只是通过<C-u>
放置预段范围,然后通过<
和>
标记访问选择的边界,然后通过vim.current.buffer[lnum]
访问和修改行:
:vnoremap <Leader>s :<C-u>call Sort()<CR>
function! Sort()
...
start = vim.current.buffer.mark('<')[0]
end = vim.current.buffer.mark('>')[0]