Vim:如何跳转到当前段落的第一行/最后一行?

时间:2011-01-29 12:44:02

标签: vim

使用{}我可以跳转到段落的开头/结尾(空行),但是如何转到段落的第一行/最后一行呢?

4 个答案:

答案 0 :(得分:6)

映射一些新命令:

段落第一行的开头:

:map f {)

段落最后一行的开头:

:map l }(

然后使用fl进行导航。您可能想要选择备用键。

答案 1 :(得分:3)

转到段落第一个单词的开头:TADOConnection

转到段落的最后一个单词的末尾:public interface InterfaceName<T> { T functionName(..., ...); }

答案 2 :(得分:1)

我只能建议

set whichwrap+=b,s
set virtualedit=onemore
nnoremap { k{<Space>0
vnoremap { k{<Space>0
nnoremap } j}<BS>0
vnoremap } j}<BS>0

(编辑)。

答案 3 :(得分:0)

我希望能够使用Vimscript进行类似的操作(以编程方式将当前段落的行转换为有序列表或无序列表)。处理当前段落的第一行也是当前缓冲区的第一行(或者该段落的最后一行是缓冲区的最后一行)的情况是有问题的,需要花费几个小时才能解决。

为回答这个问题,我修改了想出的功能,通过修改它们以移动光标而不返回行号来解决我的问题。请注意,我的解决方案保留了光标的列位置,但这可能不是必需的。

function! MoveParagraphFirstLine()
  let column = col(".")
  let first_line = line("'{")
  " Detect if the first line of the current paragraph is also the first line
  " of the current buffer and move cursor position accordingly.
  if first_line == 1
    call cursor(1, column)
  else
    call cursor(first_line + 1, column)
  endif
endfunction

function! MoveParagraphLastLine()
  let column = col(".")
  let last_line = line("'}")
  " Detect if the last line of the paragraph is also last line of the buffer.
  if line("$") == last_line
    call cursor(last_line, column)
  else
    call cursor(last_line - 1, column)
  endif
endfunction

nnoremap <leader>f :call MoveParagraphFirstLine()<CR>
nnoremap <leader>l :call MoveParagraphLastLine()<CR>