Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 制表符和Shift制表符在选定文本上的智能缩进_Haskell_Emacs - Fatal编程技术网

Haskell 制表符和Shift制表符在选定文本上的智能缩进

Haskell 制表符和Shift制表符在选定文本上的智能缩进,haskell,emacs,Haskell,Emacs,在大多数现代编辑器中,您可以突出显示一段代码,缩进或取消缩进选项卡,或使用多少空格,这是标准的;在emacs中如何做到这一点 例如,我刚刚打开sublime text,突出显示了以下代码: variation1个人电话地图载体地图地址地图= 案例M.查找的个人电话地图 无->无 只需数字-> 案例M.查找编号载体映射 无->无 只需载波->M.查找载波地址映射 然后按tab键,得到 variation1个人电话地图载体地图地址地图= 案例M.查找的个人电话地图 无->无 只需数字-> 案例M.

在大多数现代编辑器中,您可以突出显示一段代码,缩进或取消缩进选项卡,或使用多少空格,这是标准的;在emacs中如何做到这一点

例如,我刚刚打开sublime text,突出显示了以下代码:

variation1个人电话地图载体地图地址地图=
案例M.查找的个人电话地图
无->无
只需数字->
案例M.查找编号载体映射
无->无
只需载波->M.查找载波地址映射
然后按tab键,得到

variation1个人电话地图载体地图地址地图=
案例M.查找的个人电话地图
无->无
只需数字->
案例M.查找编号载体映射
无->无
只需载波->M.查找载波地址映射
该代码上的一个shift tab键会将其返回到原来的位置,如果我继续按shift tab键,最终会得到以下结果:

variation1个人电话地图载体地图地址地图=
案例M.查找的个人电话地图
无->无
只需数字->
案例M.查找编号载体映射
无->无
只需载波->M.查找载波地址映射
另一答复报价:


emacs语言模式实际上没有“缩进此块”的概念 1“进一步”。相反,他们非常固执己见,有一种 “这是正确的缩进”,这就是你击球时得到的缩进 选项卡在语言模式下

除非我使用以下代码执行此操作(haskell模式和ghc mod已启用):

导入Monad
导入系统
输入IO
随机输入
进口控制单体状态
类型随机状态a=状态StdGen a
数据计数随机数=计数随机数{
crGen::StdGen
,crCount::Int
}
类型CRState=状态计数随机数
getRandom::Random a=>RandomState a
随机=
获取>>=\gen->
let(val,gen')=随机gen-in
把gen'>>
返回值
我得到以下信息:

导入Monad
导入系统
输入IO
随机输入
进口控制单体状态
类型随机状态a=状态StdGen a
数据计数随机数=计数随机数{
crGen::StdGen
,crCount::Int
}
类型CRState=状态计数随机数
getRandom::Random a=>RandomState a
随机=
获取>>=\gen->
let(val,gen')=随机gen-in
把gen'>>
返回值
当我想

导入Monad
导入系统
输入IO
随机输入
进口控制单体状态
类型随机状态a=状态StdGen a
数据计数随机数=计数随机数{
crGen::StdGen
,crCount::Int
}
类型CRState=状态计数随机数
getRandom::Random a=>RandomState a
随机=
获取>>=\gen->
let(val,gen')=随机gen-in
把gen'>>
返回值

接近ataylor的解决方案:

(自定义选项卡移位宽度4
“设置选项卡上选定的文本移动宽度”
:键入“整数”)
(将可变缓冲区设为本地“选项卡移动宽度”)
(全局设置键
(kbd“)
(λ(起点-终点)
(交互式“r”)
(如果(使用-region-p)
(省去远足
(让((取消标记零))
(严格缩进开始-结束选项卡移动宽度)))
(制表符命令的缩进)
(全局设置键
(kbd“S-”)
(λ(起点-终点)
(互动式“r”)
(如果(使用-region-p)
(省去远足
(让((取消标记零))
(严格缩进起始端(-tab移位宽度)))
(制表符命令的缩进)

如果emacs支持缩进检测(即,只获取某个变量的值),那就太好了;我发现最接近这一点的是一个名为dtrt indent的插件,但它不适用于Haskell。

我突出显示该区域并点击
C-M-\
。这是
缩进区域
,在页面上可以找到更多乐趣。

emacs语言模式实际上没有“进一步缩进此块1选项卡”的概念。相反,他们非常固执己见,有一个“这是正确的缩进”的概念,这就是你在语言模式下点击tab时得到的

一旦你习惯了,其他任何事情都会显得很奇怪。在Haskell代码中,这些case语句实际上只有一个有效的缩进,其他任何语句都是语法错误,除非添加大括号和分号。如果您真的想自定义emacs认为“正确”的缩进,请查看如何自定义您的模式。许多语言模式重用c模式变量,因此可能是一个很好的起点(尽管我不确定Haskell模式的功能,但我从未发现需要对其进行自定义)

编辑:
我在您的评论中看到,您的问题在于没有安装Haskell模式,请转到以获取它。

缩进区域将根据当前模式重新缩进一块文本

要强制添加缩进级别,可以使用
字符串矩形
,这将提示您输入字符串。在这里,您可以提供缩进级别的字符串(例如选项卡、4个空格等)。字符串将插入当前列中当前选定区域的每一行,有效地缩进该列。或者,您可以从
open矩形
,它将空白插入矩形中,并使用点和标记定义的角

强制缩进的另一种方法是调用
刚性缩进
(C-x选项卡)。这将覆盖特定于模式的缩进规则,并缩进固定数量。数值参数指定缩进量,负参数将取消缩进。如果希望在选择区域时将此作为默认行为,可以执行以下操作:

(global-set-key 
 (kbd "<tab>")
 (lambda (start end)
   (interactive "r")
   (if (use-region-p)
       (save-excursion
     (let ((deactivate-mark nil))
       (indent-rigidly start end 4)))
     (indent-for-tab-command))))
(全局设置键
(kbd“)
(λ(起点-终点)
(交互式“r”)
(如果(使用-region-p)
(省去远足
(让((取消标记零))
(严格缩进起始端4)))
(制表符命令的缩进)
Haskell公司