我也说说Emacs吧(3) - 文件基本操作
Spacemacs文件基本操作
有了前两讲的积累,我们知道了:
1. 我们既要学习emacs的操作,也要学习vi的操作
2. emacs是一个可扩展的平台,我们并不是从头配置,而是使用一套成熟的集成方案,spacemacs. spacemacs已经集成好了很多插件,比如模拟vi的evil,自动补全的ido等
3. emacs本质上是一些函数的组合,通过Alt-x执行函数名,或者通过绑定到快捷键上使用,其本质是一样的
有了以上基础知识,我们正式开始学习emacs. 我们先从最简单的打开和保存文件开始。
文件打开和保存
打开文件
emacs的标准做法是使用find-file函数,绑定在C-x C-f键上。
在spacemacs中,曾经默认将C-x C-f绑定到ido-find-file上。而现在,C-x C-f绑定到spacemacs/helm-find-files上:
(defun spacemacs/helm-find-files (arg)
"Custom spacemacs implementation for calling helm-find-files-1.
Removes the automatic guessing of the initial value based on thing at point. "
(interactive "P")
(let* ((hist (and arg helm-ff-history (helm-find-files-history)))
(default-input hist)
(input (cond ((and (eq major-mode 'dired-mode) default-input)
(file-name-directory default-input))
((and (not (string= default-input ""))
default-input))
(t (expand-file-name (helm-current-directory))))))
(set-text-properties 0 (length input) nil input)
(helm-find-files-1 input)))
也可以通过『空格 f f』的方式来使用spacemacs/helm-find-files.
可能通过【空格 f F】的方式来直接使用helm插件包中的helm-find-files:
(defun helm-find-files (arg)
(interactive "P")
(let* ((hist (and arg helm-ff-history (helm-find-files-history)))
(smart-input (or hist (helm-find-files-initial-input)))
(default-input (expand-file-name (helm-current-directory)))
(input (cond (helm-find-file-ignore-thing-at-point
default-input)
((and (eq major-mode 'org-agenda-mode)
org-directory
(not smart-input))
(expand-file-name org-directory))
((and (eq major-mode 'dired-mode) smart-input)
(file-name-directory smart-input))
((and (not (string= smart-input ""))
smart-input))
(t default-input)))
(input-as-presel (null (nth 0 (file-attributes input))))
(presel (helm-aif (or hist
(and input-as-presel input)
(buffer-file-name (current-buffer))
(and (eq major-mode 'dired-mode)
smart-input))
(if (and helm-ff-transformer-show-only-basename
(null hist))
(helm-basename it) it))))
(set-text-properties 0 (length input) nil input)
(helm-find-files-1 input (and presel (null helm-ff-no-preselect)
(concat "^" (regexp-quote presel))))))
Helm和ido一样,也是一个交互式补全的插件:https://emacs-helm.github.io/helm/
Helm只在emacs 24.4以上版本上才可以用。
打开另一个文件
标准emacs做法是find-alternate-file函数,绑定到C-x C-v键上。spacemacs上,这个键被绑定到ido-find-alternate-file函数上。
(defun ido-find-alternate-file ()
...
(interactive)
(ido-file-internal 'alt-file 'find-alternate-file nil "Find alternate file: "))
将另一个文件的内容插入到当前文件
标准emacs的做法是insert-file函数,绑定到C-x i键上。spacemacs默认绑定到ido-insert-file函数上。
(defun ido-insert-file ()
(interactive)
(ido-file-internal 'insert 'insert-file nil "Insert file: " nil nil 'ido-enter-insert-buffer))
以二进制的方式打开文件
emacs默认没有将其绑定到快捷键上,这个功能是hexl-find-file函数来实现的。打开后会进入hexl-mode.
spacemacs将其绑定到『空格 f h』上。
保存文件
保存文件不涉及交互操作,所以ido和helm都不管,还是用的emacs默认的save-buffer函数。
emacs默认将其绑定在C-x C-s键上,spacemacs又提供了”空格 f s”的快捷键
(defun save-buffer (&optional arg)
(interactive "p")
(let ((modp (buffer-modified-p))
(make-backup-files (or (and make-backup-files (not (eq arg 0)))
(memq arg '(16 64)))))
(and modp (memq arg '(16 64)) (setq buffer-backed-up nil))
(if (and modp
(buffer-file-name)
(not noninteractive)
(not save-silently))
(message "Saving file %s..." (buffer-file-name)))
(basic-save-buffer (called-interactively-p 'any))
(and modp (memq arg '(4 64)) (setq buffer-backed-up nil))))
另存为文件
另存为文件又涉及交互操作了,标准emacs使用write-file函数,而spacemacs使用ido-write-file函数。它们都是绑定到C-x C-w键上。
(defun ido-write-file ()
(interactive)
(let ((ido-process-ignore-lists t)
(ido-work-directory-match-only nil)
(ido-ignore-files (cons "[^/]\\'" ido-ignore-files))
(ido-report-no-match nil)
(ido-confirm-unique-completion t)
(ido-auto-merge-work-directories-length -1))
(ido-file-internal 'write 'write-file nil "Write file: " nil nil 'ignore)))
退出emacs
spacemacs对此没有扩展,都是使用save-buffers-kill-terminal函数,绑定到C-x C-c键上。
lisp
(defun save-buffers-kill-terminal (&optional arg)
(interactive "P")
(if (frame-parameter nil 'client)
(server-save-buffers-kill-terminal arg)
(save-buffers-kill-emacs arg)))
文件操作小结
本节涉及的插件:ido, helm
| 功能 | 函数 | 快捷键 | leader键 |
|---|---|---|---|
| 打开文件 | spacemacs/helm-find-files | C-x C-f | 空格 f f |
| find-file | 无 | 无 | |
| ido-find-file | 无 | 无 | |
| helm-find-files | 无 | 空格 f F | |
| 打开另一个文件 | ido-find-alternate-file | C-x C-v | 无 |
| find-alternate-file | 无 | 无 | |
| 将另一个文件的内容插入到当前文件 | ido-insert-file | C-x i | 无 |
| insert-file | 无 | 无 | |
| 保存文件 | save-buffer | C-x C-s | 空格 f s |
| 另存为文件 | ido-write-file | C-x C-w | 无 |
| 以二进制的方式打开文件 | hexl-find-file | 无 | 空格 f h |
| 退出emacs | save-buffers-kill-terminal | C-x C-c | 无 |
我也说说Emacs吧(3) - 文件基本操作的更多相关文章
- (大数据工程师学习路径)第一步 Linux 基础入门----目录结构及文件基本操作
Linux 目录结构及文件基本操作 介绍 1.Linux 的文件组织目录结构. 2.相对路径和绝对路径. 3.对文件的移动.复制.重命名.编辑等操作. 一.Linux 目录结构 在讲 Linux 目录 ...
- Linux 目录结构及文件基本操作
Linux 目录结构及文件基本操作 实验介绍 1.Linux 的文件组织目录结构. 2.相对路径和绝对路径. 3.对文件的移动.复制.重命名.编辑等操作. 一.Linux 目录结构 在讲 Linux ...
- java之文件基本操作
java之文件基本操作 1 使用 BufferedReader 在控制台读取字符 public static void readChar() throws IOException{ char c; I ...
- Linux - 文件基本操作管理
文件基本操作管理 复制文件和目录 格式: Cp 源文件(文件夹) 新目标文件名(文件夹) 相同目录下,指定文件名. 不同目录下,不需要指定文件名. 参数: –r:递归复制整个目录树. –v:再复制 ...
- Linux 01 Liunx目录结构及文件基本操作
Linux目录结构及文件基本操作 1.Linux的文件组织目录结构(遵循FHS标准) FHS(Filesystem Hierarchy Standard)标准:多数Linux版本采用这种文件组织形式, ...
- emacs 只读打开文件
emacs 只读打开文件 : C-x C-r emacs 让buffer区变成只读 : C-x C-q emacs 让只读buffer区变成可以保存修改 : C-x C-q
- 文件基本操作 (C语言)
一切皆文件 ---Linux 头文件 <stdio.h> 中定义了文件的相关操作 #include <stdio.h> 文件操作基本流程: 打开:fopen 相关操作 关闭:f ...
- NO.4day LINUX centos 文件基本操作
LINUX centos 文件基本操作 1 LINUX简介 Linux的定义:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CP ...
- 实验楼学习linux第一章第四节linux目录结构及文件基本操作
linux目录结构及文件基本操作 常用命令 切换目录 cd 当前目录 . 上一级目录 .. (.和..开头的都是隐藏文件) 查看隐藏文件 ls -a 上一级所在目录 - 当前用户home目录 ~ 获取 ...
随机推荐
- mybatis批量保存的两种方式(高效插入)
知识点:mybatis中,批量保存的两种方式 1.使用mybatis foreach标签 2.mybatis ExecutorType.BATCH 参考博客:https://www.jb51.net/ ...
- 第六篇:Spark SQL Catalyst源码分析之Physical Plan
/** Spark SQL源码分析系列文章*/ 前面几篇文章主要介绍的是spark sql包里的的spark sql执行流程,以及Catalyst包内的SqlParser,Analyzer和Optim ...
- RabbitMQ入门(6)——远程过程调用(RPC)
在RabbitMQ入门(2)--工作队列中,我们学习了如何使用工作队列处理在多个工作者之间分配耗时任务.如果我们需要运行远程主机上的某个方法并等待结果怎么办呢?这种模式就是常说的远程过程调用(Remo ...
- 02_zookeeper集群安装
zookeeper集群安装 (1) 下载zookeeper安装包,并上传到要组成zookeeper集群的多个机器上 我放置的目录:/usr/local/src/zookeeper-3.4.5.ta ...
- 关于JBoss的一些项目配置
1. 如何使用 IP:port 的形式访问项目 : [1] 在standalone.xml文件中,查找<interfaces>标签,添加如下节点 : <interface name= ...
- Kaggle 项目之 Digit Recognizer
train.csv 和 test.csv 包含 1~9 的手写数字的灰度图片.每幅图片都是 28 个像素的高度和宽度,共 28*28=784 个像素点,每个像素值都在 0~255 之间. train. ...
- Impala 技术点梳理
1.优点 1.1 快! 主节点生成执行计划树并分发执行计划至各节点并行执行的拉式获取数据(MR:推式获取数据) 计算的中间结果不写入磁盘 1.2 便利 提供SQL语义,可以方便的进行复杂的数据分析任 ...
- jmeter-time函数
别人写的一个详解置顶 http://www.cnblogs.com/MasterMonkInTemple/p/3442770.html 新建beanshell,time函数格式${_time(YYYY ...
- 为cloudstack搭建ceph文件系统
1. 安装dell服务器, raid卡需要采用直通模式(non-raid); 各磁盘独立运行. 网络依赖硬件不同,使用万兆网卡或者两个千兆网卡做bonding6. 2. 配置host map(1 ...
- 使用Mysql Workbench 导入数据库提示 ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for
今天再复制服务器上数据库的时候(使用Mysql Workbench )提示1227错误, 数据库版本5.7.18,复制到的数据库也是5.7.18. 总结一下网上的几种方法: 方法一: 最直观的翻译是说 ...