Vi:如何自动插入空格

时间:2012-05-11 11:28:48

标签: keyboard-shortcuts indentation vi

我正在尝试为像我这样喜欢线条完美对齐的疯狂人物写一个不错的功能。

我经常写一些格式为“key = value”的文件。 由于密钥可能包含不确定数量的字符,因此必须手动对齐“=”符号,这些符号并不酷。

有没有办法告诉vi“当有人输入相同的字符,然后根据需要插入空格去第25列,然后写一个相等的符号”?

第二步是定义将此格式应用于整个文件的快捷方式。

任何帮助都将不胜感激。

本。

1 个答案:

答案 0 :(得分:1)

插入模式中映射=的行为。

下一个代码将从当前光标位置向第24列添加空格,并在其后添加等号。如果光标位置后面有字符(假设在单词的中间),那么这些字符将在第25列之后移动。将其添加到vimrc文件并尝试。

"" If length of the line is more or equal to 24, add an equal sign at the end.
"" Otherwise insert spaces from current position of cursor until column 24 
"" and an equal sign, moving characters after it.
function My_align()
    let line_len = strlen( getline('.') )
    if line_len >= 24
        s/$/=/
        return
    endif
    let col_pos = col('.')
    exe 's/\%#\(.\|$\)/\=submatch(1) . printf( "%' . (24 - col_pos) . 's%s", " ", "=" )/'
endfunction

inoremap = <Esc>:call My_align()<CR>A

对于第二步,使用multiple repeats命令,检查等号并在其前面的第25列插入空格。如果在执行它之前在第25列之后是等号,那么将无法工作,但你明白了。

:g/=/exe 's/=/\=printf( "%' . ( 24 - stridx( getline('.'), "=" ) ) . 's", " " ) . submatch(0)/'