vim - Vim 中令人恼火的 Tab 问题,在 Haskell 中

标签 vim haskell tabs literate-programming

我正在使用“Bird”风格的读写haskell,它要求所有代码如下:

> module Main (main) where

如果我有一个块,它应该是这样的:
> main = do
>     args = getArgs
>     file = args!![0]

等等。但是,当我输入 gt 符号时,然后输入一个空格并按 Tab 键,它仅用于 两个空格!

我已执行以下操作来尝试解决此问题:
set tabexpand
set tabstop=4
set softtabstop=4
set noautoindent
set shiftwidth=4

任何帮助将不胜感激我认为上面的内容基本上只会使其插入 4 个空格而不是任何制表符。

最佳答案

我不知道有什么简单的方法可以解决这个问题,但这里有一些您可以尝试的解决方法(按复杂程度的粗略顺序)。

  • 将您的缩进设置为两个空格,并且不必按 Tab 两次。
  • 使制表符在插入模式下不分青红皂白地插入 4 个空格,忽略所有制表位和缩进规则/选项。
    :imap <Tab> <Space><Space><Space><Space> 
    
  • 使用修补过的 Vim,它允许您设置任意制表位。在 the Vim patches page 有一个可变的制表位补丁.
  • 编写自己的缩进算法。见 :help indentexpr有关如何执行此操作的详细信息。
  • 关于vim - Vim 中令人恼火的 Tab 问题,在 Haskell 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6970304/

    相关文章:

    vim - 如何使用 vim 键绑定(bind)在 Sublime Text 2 中插入垂直文本列?

    list - 在列表上应用函数的 "permutations"

    Haskell 让表达式收敛,而使用 fix 的类似表达式不收敛

    javafx - 如何在 javafx TabPane 的第一个 Tab 左边添加空间?

    android - 如何禁用android屏幕中的选项卡?

    vim - 标记文件中的相对路径

    vim - 这个 : # vim:sw=4:ts=4:et: 的 Vim 功能名称是什么

    vb.net - 如何在 Textblock 中输入制表符?

    vim - 与其他任何IDE或文本编辑器相比,使用emacs,vim和nano之类的东西有什么好处?

    项目特定位置的 Haskell 堆栈