我也说说Emacs吧(3) - 文件基本操作

简介: 我们正式开始学习emacs. 我们先从最简单的打开和保存文件开始。

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键上。

文件操作小结

本节涉及的插件: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
目录
相关文章
|
7月前
|
存储 搜索推荐 Shell
【Shell 命令集合 文本编辑器】Linux joe 编辑器的使用教程
【Shell 命令集合 文本编辑器】Linux joe 编辑器的使用教程
93 0
|
7月前
|
Shell Linux C语言
【Shell 命令集合 文本编辑器】Linux jed 编辑器使用指南
【Shell 命令集合 文本编辑器】Linux jed 编辑器使用指南
81 0
|
缓存 Ubuntu Linux
Vim编辑器入门指南:安装、基本操作和高级技巧详解 | 适用于Linux系统
Vim编辑器入门指南:安装、基本操作和高级技巧详解 | 适用于Linux系统
979 0
|
7月前
|
Java Linux
Linux目录常用操作
Linux目录常用操作
34 0
|
7月前
|
Linux 开发工具 C语言
Vi编辑器的基本使用
Vi编辑器是最常用的Linux系统文本编辑工具,可以帮助我们通过一系列命令对文本文件进行编辑操作,具有命令行模式、插入模式、底行模式这三种工作模式,通常我们通过Vi编辑器对一个文件进行操作,需要在这三种模式之间来回切换。本文将列举各模式操作方法并带领大家一起用Vim编辑器写出第一个HelloWorld程序。
109 0
|
Linux 程序员 开发工具
【Vim】基本操作及命令集详解
【Vim】基本操作及命令集详解
185 0
Linux常用命令语法(三)压缩解压命令,附命令行操作常用快捷键
Linux常用命令语法(三)压缩解压命令,附命令行操作常用快捷键
Linux常用命令语法(三)压缩解压命令,附命令行操作常用快捷键
|
人工智能 数据可视化 Unix
【Linux】指令入门之文本编辑工具Vim(2)(七)
Vim 是一个高度可配置的文本编辑器,旨在让创建和更改任何类型的文本变得非常高效。Vim 非常稳定,开发迭代版本贴别快。其特点有以下几个:持久的多级撤消树、广泛的插件系统、支持数百种编程语言和文件格式、强大的搜索和替换、 与许多工具集成。
【Linux】指令入门之文本编辑工具Vim(2)(七)
|
Java Linux
搞定Linux目录常用操作
Linux目录常用操作
157 0
搞定Linux目录常用操作
|
Linux
《Linux指令从入门到精通》——第 4 章 常用文本编辑与处理指令的使用 4.1Linux下的文本编辑简介
文本编辑器是用作编写普通文字的应用软件,它与文档编辑器的不同之处在于它并非用作桌面排版,而是常用来编写程序的源代码。本章将为大家讲述命令行模式下的文本编辑和处理指令的具体使用方法。
1321 0