首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Vim:开始插入与游标相同列中的新行

Vim:开始插入与游标相同列中的新行
EN

Stack Overflow用户
提问于 2015-06-29 17:19:37
回答 3查看 821关注 0票数 2

Haskell有一个名为“警卫”的语言特性,看起来如下(从‘|’开始):

代码语言:javascript
运行
复制
powMod a p m | odd p = (a * powMod asq halfp m) `polyMod` m
             | otherwise = powMod asq halfp m
    where
        halfp = p `div` 2
        asq = (a*a) `polyMod` m

适当的风格要求你保持护卫在多行对齐彼此。当我输入源代码时,我倾向于输入函数定义的第一行,然后按enter,然后是混乱的tabspacebackspace,直到光标对齐到第一个'|‘。我更喜欢把光标放在第一个'|‘(用'F|’或类似的东西)上,然后做一些简单的事情来打开一个新的行,然后开始在同一列插入,而不自动缩进使光标退到左边的边缘,并且没有任何混乱的手动对齐。

在同一列的下一行开始插入时,我需要做的简单事情是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-29 19:36:18

来回答你的问题

我更喜欢把光标放在第一个“\”(带有‘F\“或类似的东西)上,然后做一些简单的事情,打开一个新行,然后开始在同一列插入

您可以设置virtualedit。这允许您在任何地方移动光标,无论您是否到达行尾(现在没有它,我就活不下去)。这样,一旦你在|上,你只需要按下ji (下去开始插入)。

完成此操作后,使用autoindent使每个换行符与前一行在相同的缩进处开始。

另一种方法是使用虚拟块Ctrl-V,向下走几行,然后按r|。这将绘制|的垂直线。

票数 3
EN

Stack Overflow用户

发布于 2015-06-29 19:03:49

不久前,我在超级用户上发布了一个非常类似的问题:

如何在特定字符下对齐光标?

不过,还有另一种解决方案,我比较喜欢:这种对齐方式的问题是,如果您更改函数的名称、变量的名称等,则需要更改整个块的缩进,这很麻烦,特别是当向版本控制的项目发送补丁时,另一种方法是添加新行,只需一步缩进。

代码语言:javascript
运行
复制
powMod a p m
    | odd p = (a * powMod asq halfp m) `polyMod` m
    | otherwise = powMod asq halfp m
  where
    halfp = p `div` 2
    asq = (a*a) `polyMod` m

如果模式本身变得过于复杂,比如使用图案护卫时,可以再次缩进方程,如

代码语言:javascript
运行
复制
powMod a p m
    | odd p -- some very long pattern
      = (a * powMod asq halfp m) `polyMod` m
    | otherwise
      = powMod asq halfp m
  ...
票数 2
EN

Stack Overflow用户

发布于 2015-06-29 18:53:12

我使用vim插件表形来对齐。还有其他插件,如Align.vim易对齐

如果您想进行自动对齐,那么将以下内容添加到~/.vim/after/ftplugin/haskell.vim

代码语言:javascript
运行
复制
inoremap <silent> <buffer> <bar> <bar><esc>:call <SID>align()<cr>a
function! s:align()
  if exists(':Tabularize') && line('.') > 1 && getline(line('.') - 1) =~ '|' && getline('.')[0:col('.')] =~ '^\s*|$'
    if getline(line('.') - 1) =~ '^\s*|'
      Tabularize/^\s*\zs|/
    else
      Tabularize/^[^|]*\zs|/
    endif
    normal! 0f|
  endif
endfunction

这将使您的警卫在插入模式下动态对齐。它需要表格插件。它是以蒂姆·波普的cucumbertables.vim要点为基础的。

有关tabular.vim的更多帮助,请参见以下维姆卡斯特集:用Tabular.vim对齐文本

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31121764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档