0x03 emacs在mac下竟然不能用meta键?
既然用mac写代码,基本上都用iterm2了吧。
iterm2下开启了emacs,meta键(左option键)默认用不了,需要手动开启。
参考:
https://www.jianshu.com/p/53cd3cdf2679?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
0x02 emacs中开启shell窗口
created 2018年10月21日 07:32:12
modified 2018年10月21日 07:32:18
我用emacs的目的是C/C++编程,在不使用IDE的前提下,用CMake构建整个工程,因而整体上包括三个部分:1)写代码; 2)编译;3)调试(debug)。其中编译往往有结果输出,和代码文件应该在不同窗口中展示。
通过M-x shell
,在emacs中开启一个shell窗口。此窗口和ubuntu桌面环境下用Ctrl+Alt+T开启的终端是同样的shell:你如果系统默认用zsh,这里就是zsh;系统默认是bash,这里就是bash。注意:这里并不使用eshell的原因是:如果在eshell中通过source ~/.xxxrc
方式来修改PATH环境变量是无法生效的,这对于cmake等工具通过export PATH来临时切换版本是无效的。所以还是用熟悉的默认shell而不是eshell。
具体的,我用CMake构建一个最基本的hello world的C工程,需要3个窗口:
- 编辑CMakeLists.txt的窗口
- 编辑src/hello.c的窗口
- shell窗口,用来编译
可以通过C-x 2或者C-x 3来划分出一个新的子窗口。
附带一段CMake3.12.3编译脚本(考虑到android ndk用了cmake3.6,cmake越新越好吧)
mkdir /tmp/download
wget https://cmake.org/files/v3.12/cmake-3.12.3.tar.gz /tmp/download
cd cmake-3.12.3
./configure --prefix=/usr/local/cmake-3.12.3
make -j3
sudo make install
echo 'export PATH=/usr/local/cmake-3.12.3/bin:$PATH' > ~/.cmakerc
source ~/.cmakerc
0x01 ubuntu下编译安装emacs26.1,带图形界面
created: 2018年10月18日 23:27:32
为什么编译安装
apt提供的emacs太老,而我想配置的包(如company-lsp)需要高版本emacs支持。
为什么要编译带图形界面的
GUI从来都是对于新手能降低使用门槛的良好交互体验。如果遇到不会的地方,鼠标点一点,也能摸索。
怎么编译安装带图形界面的emacs
cd /tmp
wget http://mirrors.nju.edu.cn/gnu/emacs/emacs-26.1.tar.gz
tar -zxvf emacs-26.1.tar.gz
cd emacs-26.1
sudo apt install -y libxpm-dev libjpeg62-dev libgif-dev libtiff4-dev libxaw7-dev libpng-dev libtiff5-dev libgnutls-dev libncurses5-dev libgtk-3-dev libwebkitgtk-3.0-dev texinfo libx11-dev libxpm-dev libjpeg-dev libpng-dev libgif-dev libtiff-dev libgtk2.0-dev libncurses-dev gnutls-dev libgtk-3-dev
./configure --prefix=/usr/local/emacs-26.1 --with-x-toolkit=gtk3
make -j8
sudo make install
0x00 初步配置emacs
created: 2018年07月29日21:08:13
modified: 2018年10月18日 23:32:08
因为要远程连接到服务器上写C++代码,考虑到{不能用服务器的图形界面,vim的自动补全不够理想,不想用samba/sftp/git/svn+本地IDE/vscode的方式},决定学习使用emacs,并逐步配置能用的C++开发环境,如语法高亮、自动补全、语法提示、调试等。
先根据emacs自带的TUTORIAL和pluskid的emacs生存手册进行了学习,熟悉了基本的快捷键、查看帮助文档的方法(这些保证了视频中提到C-x, M-x,
现代的编辑器,例如Notepad++, Sublime, Atom, VSCode,都有自己的插件系统。emacs现在也有自己的插件系统,其中最有名的仓库是melpa。类似于Python的pip、apt-get和nuget的源等,melpa也有国内镜像,例如清华tuna源就包含了melpa,可以加速下载插件。
根据视频内容和自身情况,~/.emacs.d/init.el
中的内容为:
;; turn off startup message page
;; 关闭启动界面默认显示的消息
(setq inhibit-startup-message t)
;; package management
;; As in P.R. China, using emacs-china's mirror is more stable than tuna's, and faster than directly to offcial melpa
;; 使用tuna镜像加速melpa包下载速度
(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives
'("melpa" . "http://elpa.emacs-china.org/melpa/"))
(when (version< emacs-version "27.0")
(package-initialize))
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
;; try包,能直接使用某个包而无需安装
;; 使用方法: M-x try; 回车; 输入包的名字,例如2048-game;然后M-x 2048-game启动游戏开始玩
(use-package try
:ensure t)
;; which-key包,当输入一个emacs组合键而忘记另一半组合键的时候,它弹出buffer来提示可用的命令
(use-package which-key
:ensure t
:config (which-key-mode))
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(package-selected-packages (quote (lsp-mode company-lsp which-key try use-package))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
;字体
; 暂时写死,目前只考虑windows下的效果
(set-face-attribute 'default nil :family "Microsoft Yahei Mono" :height 110)
;; part2
;; hide toolbar
;; 隐藏工具栏
(tool-bar-mode -1)
;; 用于函数跳转定义等
(require 'company-lsp)
(push 'company-lsp company-backends)
;; 设置C语言的配置
;; (require 'init-c-style) ;;不管用
(load "~/.emacs.d/init-c-style")
~/.emacs.d/init-c-style.el
:
;; set cc-mode, default style
(add-hook 'c-mode-common-hook '(lambda()
(c-ste-style "cc-mode")))
;; 设置缩进为4个空格宽度,而不是2个
(setq-default c-basic-offset 4)
;; load google-c-style
;;(add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/google-c-style"))
;;(require 'google-c-style)
;;(add-hook 'c-mode-common-hook 'google-set-c-style)
;;(add-hook 'c-mode-common-hook 'google-make-newline-indent)
;;(provide 'init-c-style)