【发布时间】:2013-02-06 05:32:49
【问题描述】:
是否有任何键映射可以输出正在编辑的行的当前行号?或者,更好的是,我们可以根据键映射的输出来做公式吗?
我想获取行号并将1 添加到当前正在编辑的文本中。
【问题讨论】:
-
输出的意思是“我的文档的文本”
-
您是要显示结果,还是要将该结果写入缓冲区?
是否有任何键映射可以输出正在编辑的行的当前行号?或者,更好的是,我们可以根据键映射的输出来做公式吗?
我想获取行号并将1 添加到当前正在编辑的文本中。
【问题讨论】:
Ctrl+G 会告诉你行号,甚至是光标所在的列。如果你的意思是把它作为文本输出到你的文档中,那不是我知道。
【讨论】:
“输出”是什么意思?你可以这样做:
:echo line(".") + 1
显示当前行号加1。可以用map绑定按键,例如:
:noremap <F1> :echo line(".") + 1<cr>
实际将数据插入缓冲区:
:noremap <F1> :execute "normal! i" . ( line(".") + 1 )<cr>
【讨论】:
:map。没有nore no *map commands should be used at all,但另外:map 定义了比您希望看到的更多模式的映射:您不需要这些映射在视觉(它们根本不会在这里工作)和操作员待定模式.同样使用:normal 很奇怪,你有<C-r> 在插入模式下处理这种事情:nnoremap <F1> i<C-r>=line('.')+1<CR><Esc>。
@ZyX 在对另一个答案的评论中给出了答案:
你有
<C-r>在插入模式下处理这种事情:
nnoremap <F1> i<C-r>=line('.')+1<CR><Esc>
【讨论】:
可以通过virtcol('.')获取当前光标位置的视觉宽度;通过表达式寄存器将其插入缓冲区,例如在插入模式下使用<C-R>=virtcol('.')<CR>
请注意,当行包含双角字符、<Tab> 或不可打印字符时,宽度与字符数不同。
【讨论】:
与原始问题无关,但对我来说,要查看我更喜欢使用:#的行号,它也会打印出行号和内容
【讨论】: