我正在尝试为像我这样喜欢线条完美对齐的疯狂人编写一个不错的功能。
我经常写一些格式为“key = value”的文件。由于密钥可能包含不确定数量的字符,因此必须手动对齐“=”符号,这并不酷。
有没有办法告诉 vi “当有人键入等号时,然后根据需要插入空格以转到第 25 列,然后写一个等号”?
第二步是定义一个快捷方式以将此格式应用于整个文件。
任何帮助,将不胜感激。
本。
我正在尝试为像我这样喜欢线条完美对齐的疯狂人编写一个不错的功能。
我经常写一些格式为“key = value”的文件。由于密钥可能包含不确定数量的字符,因此必须手动对齐“=”符号,这并不酷。
有没有办法告诉 vi “当有人键入等号时,然后根据需要插入空格以转到第 25 列,然后写一个等号”?
第二步是定义一个快捷方式以将此格式应用于整个文件。
任何帮助,将不胜感激。
本。
映射插入模式=
中的行为。
下一个代码将从当前光标位置到第 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
第二步,使用多次重复命令,检查等号并插入空格,直到第 25 列之前。如果等号在执行之前在第 25 列之后将不起作用,但你明白了。
:g/=/exe 's/=/\=printf( "%' . ( 24 - stridx( getline('.'), "=" ) ) . 's", " " ) . submatch(0)/'