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) - 文件基本操作的更多相关文章

  1. (大数据工程师学习路径)第一步 Linux 基础入门----目录结构及文件基本操作

    Linux 目录结构及文件基本操作 介绍 1.Linux 的文件组织目录结构. 2.相对路径和绝对路径. 3.对文件的移动.复制.重命名.编辑等操作. 一.Linux 目录结构 在讲 Linux 目录 ...

  2. Linux 目录结构及文件基本操作

    Linux 目录结构及文件基本操作 实验介绍 1.Linux 的文件组织目录结构. 2.相对路径和绝对路径. 3.对文件的移动.复制.重命名.编辑等操作. 一.Linux 目录结构 在讲 Linux ...

  3. java之文件基本操作

    java之文件基本操作 1 使用 BufferedReader 在控制台读取字符 public static void readChar() throws IOException{ char c; I ...

  4. Linux - 文件基本操作管理

    文件基本操作管理   复制文件和目录 格式: Cp 源文件(文件夹) 新目标文件名(文件夹) 相同目录下,指定文件名. 不同目录下,不需要指定文件名. 参数: –r:递归复制整个目录树. –v:再复制 ...

  5. Linux 01 Liunx目录结构及文件基本操作

    Linux目录结构及文件基本操作 1.Linux的文件组织目录结构(遵循FHS标准) FHS(Filesystem Hierarchy Standard)标准:多数Linux版本采用这种文件组织形式, ...

  6. emacs 只读打开文件

    emacs 只读打开文件 : C-x C-r emacs 让buffer区变成只读 : C-x C-q emacs 让只读buffer区变成可以保存修改 : C-x C-q

  7. 文件基本操作 (C语言)

    一切皆文件 ---Linux 头文件 <stdio.h> 中定义了文件的相关操作 #include <stdio.h> 文件操作基本流程: 打开:fopen 相关操作 关闭:f ...

  8. NO.4day LINUX centos 文件基本操作

    LINUX centos 文件基本操作 1 LINUX简介 Linux的定义:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CP ...

  9. 实验楼学习linux第一章第四节linux目录结构及文件基本操作

    linux目录结构及文件基本操作 常用命令 切换目录 cd 当前目录 . 上一级目录 .. (.和..开头的都是隐藏文件) 查看隐藏文件 ls -a 上一级所在目录 - 当前用户home目录 ~ 获取 ...

随机推荐

  1. Git笔记之初识vi编辑器

    1.vi编辑器 如同Windows下的记事本,vi编辑器是Linux下的标配,通过它我们可以创建.编辑文件.它是一个随系统一起安装的文本编辑软件. vi编辑器提供了3种模式,分别是命令模式.插入模式. ...

  2. ArrayBlockingQueue,LinkedBlockingQueue分析

    BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有一个容量,让容量满时往BlockingQueue中添加数据时会造成阻塞,当容量为空时取元素操作会 ...

  3. 采用OpenReplicator解析MySQL binlog

    Open Replicator是一个用Java编写的MySQL binlog分析程序.Open Replicator 首先连接到MySQL(就像一个普通的MySQL Slave一样),然后接收和分析b ...

  4. dubbo-admin与多注册中心(注册中心集群)

    在使用dubbo时,注册中心是一个必要的架构组成成员.当我们的注册中心没有采取集群时,如何在dubbo-admin中配置,我们可以根据dubbo官方文档,很快找到我们的答案. 但是当注册中心集群之后怎 ...

  5. mybatis整合ehcache

    知识点:mybatis整合encache缓存框架,缓存从数据库中,查询的数据,不使用mybatis自带的二级缓存 补充:github上Mybatis Ehcache 适配器包说明地址:http://w ...

  6. Python学习札记(十六) 高级特性2 迭代

    参考:迭代 Note 1.如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). 在C.C++.Java等语言中,for循 ...

  7. 使用FireFox插件RESTClient工具POST方法?

    下面尝试用Firefox的restclient,来调取api 当然需要打开火狐浏览器安装restclient的插件https://addons.mozilla.org/en-US/firefox/ad ...

  8. select * from table_name where 1=1的

    我们先来看看这个语句的结果:select * from table where 1=1,其中where 1=1,由于1=1永远是成立的,返回TRUE,条件为真:所以,这条语句,就相当于select * ...

  9. checkbox及css实现点击下拉菜单

    面试遇到的问题.用checkbox中的:checked伪类选择器实现. 通过label标签来触发checkbox的unchecked 和checked两种状态:用css普通同胞选择器 ~.另外补充一点 ...

  10. JavaScript高级程序设计-读书笔记(7)

    第22章 高级技巧 1.高级函数 (1)安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串. ...