画面の外にあるときにスコープの先頭を表示する


12

スコープの開口部を画面から出た時に表示させたい。

例:

namespace a  
{  
...  
--------------------- <- display frame 
...                 |  
}*                  | * when cursor is here display "namespace a" in the minibuffer
---------------------   or on screen

これは多くのプログラミング言語で機能しますが、私は主にC ++について考えています。

もう少し明確にするために、そしてVSを知っている人のために、私はVisual Studioに存在するものと同様の機能を望みます。つまり、スコープの末尾にカーソルを置くと、編集バッファーの上部にスコープの先頭が表示されます。

この機能はすでにどこかに存在していますか?


知りたいのですが、私の回答は役に立ちましたか?
Tu Do

@TuDoはい!ちょっと見てみる時間がありました。私はすでにセマンティックがあり、グローバルセマンティックスティッキーファンクモードをオンにするだけでうまくいきました。ありがとう。私の問題は、今..色はheaderlineが読みやすくていないということです
log0

回答:


14

C / C ++ / Java / Emacs Lisp / Pythonを記述している場合は、semantic-sticky-func-modeが希望どおりの動作をします。

:これはGitのCEDETで動作しているようで、現在Emacs 24.4にあるCEDETのストックではありません。GitからEmacsを入手するには:

git clone http://git.code.sf.net/p/cedet/git cedet

そして、最初にCEDETをinitファイルの中で何よりも先にロードします。

(load-file (concat user-emacs-directory "/cedet/cedet-devel-load.el"))
(add-to-list 'load-path (concat user-emacs-directory "cedet/contrib"))
(load-file (concat user-emacs-directory "cedet/contrib/cedet-contrib-load.el"))

有効にすると、このモードは、関数ポイントが現在のバッファーの最初の行にあることを示します。これは、画面よりも大きく広がる非常に長い関数があり、関数名を読み取るために上にスクロールしてから元の位置にスクロールする必要がない場合に便利です。

関数名だけでなく、完全な関数インターフェイス(戻り値の型、関数名、パラメーター)を表示します。

これを有効にするには、このコードをinitファイルに入れます。

(require 'semantic)
(semantic-mode 1)
(global-semantic-stickyfunc-mode 1)

更新:現在の問題の1つは、semantic-stickyfunc-mode複数の行に散らばっているすべてのパラメーターが表示されないことです。この問題を解決するために、stickyfunc-enhanceパッケージを作成しました。

デモ

これがCのデモです:

セマンティックスティッキーファンクモードc

Emacs Lispのデモは次のとおりです。

セマンティックスティッキーファンクモードelisp

更新:または、helm-semantic-or-imenuを使用できます。関数内にいてコマンドを実行すると、カーソルがリスト内の関数の右側に置かれるため、常に完全な関数インターフェイスを確認できます。デモ:

  • まず、helm-semantic-or-imenu関数helm-define-key-with-subkeysに移動してポイントを移動します。

  • 次に、helm-semantic-or-imenuもう一度開始して、helm-define-key-with-subkeys事前に選択されています。

  • 次に、ポイントを変数helm-mapに移動し、helm-semantic-or-imenuhelm-next-sourceとhelm-previous-sourceの2つの関数で再度実行します。今回は、操作している現在のセマンティックタグ(helm-map)を表示する代わりに、Helmセマンティックバッファー内の他の2つのタグを表示します。これは、コマンドを実行する前に前置引数を指定したためです。

また、このデモはEmacs Lispに含まれており、C / C ++でも機能し、非常に長い関数インターフェイスを取得すると、より柔軟になります。

helm-semantic-or-imenu


Lisp(特にElisp)でこれをどのように機能させましたか?私はあなたのコードを評価しましたemacs -Qが、閲覧したときにあなたが説明したような動作が得られませんorg.el
itsjeyd 2014年

答えを更新しました。bzrのSemanticで試してみてください。
Tu Do

1
完全にトピックから外れています。にゃんモードを紹介していただきありがとうございます。私のコーディングは二度と同じではありません。
purple_arrows 2014年

6

あなたはすることでオンにwhich-function-modeすることができます

M-x which-function-mode RET

設定を永続的にするには、以下を追加します

(which-function-mode 1)

あなたのinitファイルに。

ドキュメントから:

現在の機能(Which Functionモード)のモード行表示を切り替えます。[...]

グローバルマイナーモードである機能モード。 有効にすると、現在の関数名が特定のメジャーモードでモードラインに継続的に表示されます。

:この名前は実際に示唆しているわけではありませんが、これは「関数」だけでなく、他のタイプのスコープでも機能します。たとえばorg-modewhich-function-modeでは、現在のサブツリーの見出しが表示されます。


ありがとう!モードラインに表示される関数名が好きです。いくつかのケースはうまくいかなかった。名前空間の構造体のメソッドと同様に、名前空間名のみが表示されました
log0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.