emacs React/JSX 开发配置

> 开始一些简单的配置,不需要的可以跳过

# helm
helm 的配置是最基础的增强emacs插件之一,pretty nice的界面以及Lazy match

## helm

### 安装
`M-x package-install RET helm`

如果自己配置了管理插件的管理器可以在你的配置文件中安装,不在赘述

### 简单的配置
在你的配置文件中保存下面的配置,例如 `~/.emacs/init.el`
```lisp
(global-set-key (kbd "M-x") 'helm-M-x)
(global-set-key (kbd "C-x b") 'helm-buffers-list)
(global-set-key (kbd "C-x C-b") 'helm-buffers-list)
(global-set-key (kbd "C-x C-f") 'helm-find-files)
```

上面将helm命令替换emacs自带的`M-x` `C-x C-f` `C-x b` `C-x C-b`

```lisp
(define-key helm-map (kbd "<tab>") 'helm-execute-persistent-action)
(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action)
(define-key helm-map (kbd "C-z") 'helm-select-action)
```

这几个命令让helm更适合我们的操作,例如查找文件时直接tab进行文件名、路径补齐。

预览图:

## YouCompleteMe

youcompleteme无论在emacs还是vim下都是一个重量级的插件,提供了自动补齐的后端框架,可以支持c#,js,c++,go 等语言的自动补齐操作,不过会占用cpu较高补齐时略卡。YouCompleteMe的server程序为`ycmd`,前端插件对应emacs和vim分别有相应的YouCompleteMe完成

为了写React我们需要js的自动补齐功能.

### 安装

首先youcompleteme 的js自动完成是使用`tern`来完成的

` npm install tern -g`

安装YouCompleteMe

`git clone https://github.com/Valloric/ycmd` ~/ycmd/

然后进行编译

```

cd ~/ycmd/

./build.py --tern-completer

```

server程序编译好后我们安装对应的emacs前端插件,

`M-x package-install RET ycmd`

`M-x package-install RET company-ycmd`

`M-x package-install RET company`

具体就是emacs的ycmd前端又使用了company的框架(好复杂,理不清)所以需要安装的包company

接着开始写emacs的配置

```

(set-variable 'ycmd-server-command '("/usr/local/bin/python" (expand-file-name"~/ycmd/ycmd")))
(setq company-tooltip-limit 10)
(setq company-idle-delay 0.5)
(setq company-echo-delay 0)
(setq company-begin-commands '(self-insert-command))
(setq company-require-match nil)

(company-ycmd-setup)

(add-hook 'after-init-hook 'global-company-mode)

```

这里第一句配置了ycmd的执行文件路径,如果配置失败将无法使用ycmd

然后重新load配置文件使配置生效,

截图如下:

## React-Mode

下面开始写我们专属的react-mode 让其能够更好地缩进代码,支持Ycmd,代码高亮等功能

### 安装

因为使用web-mode作为我们的基本缩进方案,所以需要安装web-mode

`M-x package-install RET web-mode`

###配置

```

(define-derived-mode react-mode web-mode "React-IDE"
"Major mode for eding jsx code.")
(add-hook 'react-mode-hook 'ycmd-mode)
(add-hook 'react-mode-hook
'(lambda
()
(web-mode-set-content-type "jsx")
(message "set web-mode-content-type %s" web-mode-content-type))

(add-to-list 'ycmd-file-type-map '(react-mode . ("javascript")))

(add-to-list 'auto-mode-alist '("\\.jsx$" . react-mode))

```

上面这几行就是我们的react-mode配置,解释一下:首先react-mode继承了web-mode使用其作为我们的代码风格标准,然后最下面我们又将`react-mode`告诉`ycmd`将作为`javascript`来进行代码的自动完成

最后再添加我们的文件钩子给`jsx`文件

截图如下:

上图主要演示了jsx写代码的时候的排版、自动缩进文字,web-mode对jsx的处理已经很理想了,在DOM区域直接选中代码一个tab自动排版成上图的风格,还有标签高亮,标签列高亮等功能等着我们配置。

## magit

如果提交、暂存我们的代码而不离开emacs? 方案有几种可选,没有一一使用,就用了口碑较好的一插件:`magit`,magit直接安装就能用几乎无用配置,除了自己根据喜好绑定快捷键

### 安装

`M-x package-install RET magit`

### 使用

可以直接在交互模式下使用magit,不过将常规的操作绑定快捷键更好一些。

例如我执行`magit-status`将打开一个窗口显示当前目录的状态

在此如果有多个文件我可以将光标移动一行然后按`s`键将其暂存,(git add somefile)

操作后可以`c c`进行提交,提交时`magit`会自动打开diff窗口让你看`git diff`的输出,例如

也就是git的一切操作都可以在emacs完成,magit也让git使用更加便捷。

同样如果安装了`powerline`或者`airline`之后可以在emacs底部的bar上显示当前分区,对于频频切换分区的我们而言也是相当方便。

prop: https://github.com/Qquanwei/emacs

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
开源不易,感谢你的支持,❤ star me if you like concent ^_^
hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom