GithubHelp home page GithubHelp logo

.emacs.d's Introduction

.emacs.d

It's a settings for emacs that v24.5 or later.

Usage

# OS側にEmacsが使用するモジュールを追加
sudo apt install texinfo
npm i -g jsonlint tslint typescript

## tslint と typescript はnpmのバグで同時にインストールしないと依存関係が解決できないことに留意
  - `unmet peer dependency typescript`
  - typescript は tslint の動作に必要
;; clone.
git clone [email protected]:keicy/.emacs.d.git

;; initialize emacs, install elisps.
emacs

Finish el-get initialize, then shut off emacs.

;;for avoiding bug? of el-get-lock, if there whould be el-get.lock flycheck didn't work...
git update-index --skip-worktree el-get.lock
rm ./el-get.lock 

Doc

カーソル移動

key 動作 補足
M-, 文頭,行頭,ファイル頭に移動 連続押下で順々に移動する
M-. 行末,ファイル末に移動 連続押下で順々に移動する
M-l 直前の編集箇所に移動
M-L 直後の編集箇所に移動

大文字小文字

key 動作 補足
C-r 頭を大文字
C-M-r 全て大文字
M-r 全て小文字

ページング

key 動作 補足
C-M-i 前ページ
C-M-n 次ページ
C-M-b 再描写

検索 (ISearch)

キー操作

key 動作 補足
C-e 前方検索
C-S-e 後方検索
C-h 履歴参照 RTNキー押下で選択を決定し、その後 C-e/C-S-e での検索が可能
C-f 一文字後退
M-p カーソル位置の単語で検索 連続押下で選択範囲を拡張できる
M-u クリップボードからペースト

日本語検索 (migemo)

ローマ字入力することで日本語を検索することができる。

置換/矩形/その他編集

Multiple-Cursors

key 動作 補足
C-a 全ての選択字句を対象
C-q EXIT
C-i 一つ前の選択字句を対象
C-S-i 一つ前の選択字句を対象から外す
C-n 一つ後の選択字句を対象
C-S-n 一つ後の選択字句を対象から外す
C-w 全てのカーソル位置の単語を対象
C-l 先頭に連番挿入
C-s ソート
C-t htmlのタグペア編集

Rectangle-mark-mode

key 動作 補足
SYSpre(M-b) SPC 矩形選択

タブ機能 (Elscreen)

key 動作 補足
<hiragana> n 新規タブ作成
<hiragana> k タブ削除
<hiragana> , 左のタブに移動
<hiragana> . 右のタブに移動

ファイル名編集 (Wdired)

着本的にはDired上で下記操作により使用する

key 動作 補足
<hiragana> d Dired呼出し
e 編集モード diredの表示上で対象ファイル/フォルダにカーソル置いて実施
C-c C-c 編集コミット
C-c C-k 編集破棄

フォルダ配下一括検索/編集 (Wgrep-ag)

検索文字列と対象フォルダを指定し、配下ファイルから一括検索できる Multiple-Cursorsとの併用で一括置換が可能

key 動作 補足
<hiragana> g 機能呼出し
e 編集モード 表示された一覧上で対象行にカーソル置いて実施
C-c C-c 編集コミット
C-c C-k 編集破棄

日本語入力

モード切替

key 動作 補足
C-v 切替

変換中の操作

key 動作 補足
C-i 前の分節に移動
C-n 次の分節に移動
C-j 文節区切りを縮める
C-k 文節区切りを伸ばす
S-space 前の変換候補に移動
space 次の変換候補に移動
C-S-space 前ページの変換候補に移動
C-space 次ページの変換候補に移動
C-q キャンセル 変換前時
C-q キャンセル 変換中時
C-v キャンセル 変換前時
C-v 一字後退削除 変換中時

注意点

絶対キーで定義しているバックスペース C-f は挙動がおかしく、使用できない。
バックスペースは設定ファイルで定義している C-v で行う。

候補選択時の操作 (Helm)

キー操作

key 動作 補足
C-<return> EXIT
M-i 上候補
M-n 下候補
M-k 選択
M-j 一つ上のフォルダへ戻る helm-find-files の時のみ有効
C-f 一文字後退削除
M-u クリップボードからペースト

日本語検索 (migemo)

ローマ字入力することで日本語を検索することができる。
ただし、 helm-find-files (M-b M-f/f) においては、「検索対象ディレクトリの / 直後に (半角スペース) を入れてから検索文字列を入力する」必要がある。

入力補完 (Company)

key 動作 補足
<tab> 補完実行
<return> 決定
C-<return> EXIT
M-i 上候補
M-n 下候補

.emacs.d's People

Contributors

keicy avatar keisep avatar

Watchers

 avatar

Forkers

keisep

.emacs.d's Issues

Scala REPL のキーバインドの設定方法を変更する

現状、 M-<return> が定義しても効かない。
理由は、ensimeのコードで map にこのバインドが定義されているための模様。
with-eval-after-load-feature でバインド定義してもこれを上書きできない模様、、。理由はよくわかんない、、できると思ってやっているんだが、。

解決法は下記。

(defun my-inf-binds()
  (bind-keys :map ensime-inf-mode-map
             ; システムコマンド
             ("M-<return>" . execute-extended-command)
             ("C-<tab>" . keicy-window-or-split)
             ("C-<return>" . comint-accumulate) ; デフォルトで M-<return> に割り当てられていたもの
             ; 編集
             ("M-j" . backward-char) ;一文字戻る
             ("C-M-j" . backward-word) ;一単語戻る
             ("M-k" . forward-char) ;一文字進む
             ("C-M-k" . forward-word) ;一単語進む
             ;("C-d" . delete-char) ;DEL ; これを追加すると `cntl-D` が効かなくなるので排除.ただこれがなくともデフォルトでこのバインドがシェル側に定義されているので困らない.
             ("C-M-d" . keicy-delete-word) ;単語DEL
             ("C-f" . delete-backward-char) ;Backspace
             ("C-M-f" . keicy-backward-delete-word) ;単語Backspace
             ("M-," . beginning-of-line) ;行頭
             ("M-." . end-of-line) ;行末
))
(add-hook 'ensime-inf-mode-hook 'my-inf-binds)

単に

(with-eval-after-load-feature 'ensime
  (bind-keys :map ensime-inf-mode-map
...

とするのではなく、 mode-hook に引っ掛けることで上書きできる!

環境整理

概要

原状が使いにくいため、一度根本的に見直し、シンプルな機能、使いやすいバインドに再構築する。

作業

  • キーバインド見直し
  • 使わない機能拡張削除

非アクティブなウィンドウが見切れてしまう問題を解決

scala ブランチにマージする ref #44
【追記】Scala にとどまらない問題だったため master にマージする

ENSIME の Activator Shell バッファをスクロール禁止にする。
画面が見切れてしまい見えなくなってしまうためスクロールしないバッファにしたい。

ENSIME を導入

scala ブランチにマージする

必要なものは下記

  • Lightbend Activator (ScalaのALL in ONE 開発環境)
  • ENSIME (Emacs プラグイン)

手順は下記にまとめた

詳細な情報は下記参照

検索・補完インタフェースツールの導入

下記参考に。

これを読むと、候補としては Helm , Ivy/Counsel のどちらかかな。

Helmには上記良い解説があり、感じも掴めているのでいけそう。
動作が重いのと、互換のない更新がネックらしいので、Ivyでもいけそうならシンプルにこちらでも良いかも。

99_key-binds.el の mc/keyboard-quit の挙動を確認

実害はないが、微妙に関数が呼ばれていない。
このバインドに、通常の keyboard-quit を割り当てると望の挙動になるかも?検証してみる。
あるいは、 mc/keyboard-quit が正しく動作するように再設定する。

キーバインドの定義リファクタ

  • 99_key-binds.el にまとめるのか、個々のプラグイン設定ファイルにまとめるのか
  • プラグインで定義されている key-map にカスタムのバインド定義をする箇所で、 with-eval-after-load-feature を使うようにする
    • helm の定義など、これを使えればもっとシンプルに定義し直せるかも
    • 下記コードが例
      • with-eval-after-load-featurebundle の中でなくても単独で使える
(with-eval-after-load-feature 'company
  (bind-keys :map company-active-map
             ("C-<return>" . company-abort)
             ("M-p" . nil)
             ("M-i" . company-select-previous)
             ("M-n" . company-select-next) ;デフォルトでこれだが明示的に
             ;("<tab>" . company-complete-common-or-cycle) ; デフォルト: company-complete-common
))

【追記】

この定義方法は、追加は問題なくできるが、デフォルトの挙動を上書きはできず負けてしまうという問題が発覚した、。
これではなく、下記の方法を用いるとちゃんと上書きできるのでこちらの方法でリファクタ実施する。

(defun my-inf-binds()
  (bind-keys :map ensime-inf-mode-map
             ; システムコマンド
             ("M-<return>" . execute-extended-command)
             ("C-<tab>" . keicy-window-or-split)
             ("C-<return>" . comint-accumulate) ; デフォルトで M-<return> に割り当てられていたもの
             ; 編集
             ("M-j" . backward-char) ;一文字戻る
             ("C-M-j" . backward-word) ;一単語戻る
             ("M-k" . forward-char) ;一文字進む
             ("C-M-k" . forward-word) ;一単語進む
             ;("C-d" . delete-char) ;DEL ; これを追加すると `cntl-D` が効かなくなるので排除.ただこれがなくともデフォルトでこのバインドがシェル側に定義されているので困らない.
             ("C-M-d" . keicy-delete-word) ;単語DEL
             ("C-f" . delete-backward-char) ;Backspace
             ("C-M-f" . keicy-backward-delete-word) ;単語Backspace
             ("M-," . beginning-of-line) ;行頭
             ("M-." . end-of-line) ;行末
))
(add-hook 'ensime-inf-mode-hook 'my-inf-binds)

行頭/行末 のキーバインド再考

現在 M-, M-. に割り当てているが、これらは慣習的に、IDEの定義元参照に使われている。
なので、他に良い割り当てが思いつけばそちらに移行したいと思う。

検討のポイントは下記

  • 押しやすいバインドであること
  • Shiftキー S- を活用することで、1つのキーで両者のバインドをまかなえる

Scala向け入力補完機能の設定

scala ブランチにマージ ref #44

ensime を導入すると companey-mode も自動で入る、かつ、設定もされている。
なので、キーバインドなどを再定義する。

sbt が必要ないか検証

ENSIMEの設定次第ではsbtが必要ないか検証。

  • customize-group > Ensime Server > Ensime Sbt Command:
    • /usr/bin/sbt
    • これをActivator に変える
    • この設定は必要ないっぽいが一応深堀してみる。↓だけで調子よく動いてはいる。
  • (setq sbt:program-name "activator") ; デフォルト sbt
    • これを設定ファイルに追記する

ENSIME の自動接続をONにする

customize-group から。ensimeのコマンドを入力したときにもし繋がっていなければ自動で繋いでくれるようになる。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.