Vimにダッシュを挿入する最も簡単な方法は何ですか?


33

エンダッシュを挿入する^v u 2014には、7つのキーを押します。もっと簡単な方法はありますか?(私は有向グラフを見ていましたが、ダッシュは見つかりませんでした。)


4
参考までに、U + 2014はEM DASHです。U + 2013はEN DASHです。 fileformat.info/info/unicode/char/2014/index.htmfileformat.info/info/unicode/char/2013/index.htm
クインシーバウアーズ

7
X11を使用している場合は、XComposeと言います。これはVimだけでなく、すべてのアプリケーションで機能するためです。または、OSXまたはWindowsを使用している場合、そのOSが提供する機能。
マーティントゥルノイ

おそらく最も簡単な方法ではありませんが、<Ctrl-Shift-U>2013<Space>どこでも動作するため、私は使用する傾向があります。いくつかのキーコードは大いに役立ちます(主にU + 2013、U + 2014、U + 2026、U + 2212、U + 2192、U + B0; – / — /…/-/→/°​​を使用しています)。
wchargin

好奇心から、どのようにダッシュを表示しますか?私の知る限り、固定幅でないフォントを適切に表示する方法はありません(つまり、不均一な文字幅とカーニングを使用)。したがって、emおよびenダッシュは常に文字境界の端まで伸びるハイフンのように見えます。Vimでのキャラクターの表示方法と、他の場所でのレンダリング方法との極端な切断を気にしませんか?
カイルストランド

2
私は@Carpetsmokerと一緒にいます:em- Compose - - -ダッシュ用、en- Compose - - .ダッシュ用。特に完全に未使用のCaps-Lockにマップする場合、Composeは魔法のようです。
-Rmano

回答:


42

ダイグラフを使用できます:(Ctrl+k-N大文字でN

挿入モードでは、ダイグラフにCtrl+k続けて2文字のシーケンスが入力されます。エンダッシュの場合、シーケンスは-Nです。

クインシーが指摘したように、U+2014em-dashです。ダイグラフを使用して入力する場合、シーケンスはになり-Mます。


同様に、EM DASHは<Ck> -Mで挿入できます。
クインシーバウアーズ

U+2014ダッシュではありませんか?私の人生は嘘だった!編集:今、私はそれを手に入れる:私の端末フォント(Inconsolata)は両方のダッシュを同じようにレンダリングします。
トマストメ

3
この答えにたどり着くために:16進数2013は10進数8211です。:digraphsコマンドを使用してすべての有向グラフを表示し、8211を探します
。– 200_success

10

定義済みのダイグラフがない場合、またはより記憶に残るキーシーケンスが必要な場合は、vimrcでダイグラフを定義できます。たとえば、以下は、enダッシュ(8211)とemダッシュ(8212)の2つの有向グラフを定義し、XComposeシーケンスをミラーリングします。

digraph -. 8211 -- 8212

この:digraphコマンドは、値が16進数ではなく10進数で指定されることを想定しているため、2013ではなくダッシュで8211になっています。


ダッシュ
ダイ

1
@ 200_successそうではないとは言わなかった。:) Vimの有向グラフの選択は、常により標準的な有向グラフの選択と一致するとは限らないため、すでに存在する場合でも、独自の有向グラフを定義する方法を知っておくと便利です。
ジェームスサン

8

Vimにenダッシュを挿入する標準的な方法は、tommcdoが説明したように、ダイグラフを使用することです。

しかし、私は一般的に二重字を見つけ、特にこの1は(Ctrl+k-Shift+N)かなり厄介入力します。ダッシュをより速く入力するには、次のような挿入モードマッピングのペアを、などのファイルタイプファイルに追加できます.vim/after/ftplugin/markdown.vim

それぞれen / emダッシュの場合:

inoremap <buffer> --<space> –<space>
inoremap <buffer> -- —

注:<buffer>このマッピングは、Markdownファイルにのみ適用されることを意味します。これは、2つのハイフンをダッシュ​​に置き換えたくないいくつかのコンテキスト(プログラミングなど)があるために必要です。

これらのマッピングは、私が通常使用するコンテキストでは、ダッシュがスペースで囲まれ、ダッシュがそうでないという事実を利用してます。*したがって、これらのマッピングを使用するということは、使用を余儀なくされることがあり、賢明な出力を得ることができる、あまり能力のないテキストエディターでまったく同じキー押下を使用できることを意味します。**

私は実際には、上記よりもやや複雑な解決策を使用します。これは、印刷上の理由から、emダッシュをヘアスペースで囲むのが好きだからです。Markdown記法でこれらを持つことは、それが読みにくくなりますが、幸いにも、Vimはカーソルが別の行にあるときに、特定の構文アイテムを非表示にすることができ、その「隠す」機能、で、このためのソリューションを持っています***

inoremap <buffer> --<space> –<space>
inoremap <buffer> -- &#8202;—&#8202;

syntax match entity_hairspace "&#8202;" conceal
setl conceallevel=2

*スペースなしのダッシュを使用する必要がある場合は、マッピングを入力した後にバックスペースを押すだけです。
**通常、このようなエンダッシュを使用しない場合、またはVimを使用したことがない場合は、他の何かを使用してマッピングをトリガーできます(例:--.および)---。他のトリガーを使用する場合、これを.vimrcに直接配置し、<buffer>オプションを削除することもできます。
***また、隠蔽文字ccharを使用して、構文項目を完全に非表示にする代わりに、単一の文字に置き換えることもできます。エンコードの問題が心配な場合は、これを使用して、Vimに&ndash;ファイル内のHTMLエンティティをダッシュ​​として表示させることができます。


Vimでダッシュを使用しますか?列幅は1つしか与えられていないので、ちょっと奇妙に見えませんか?em-dashを実際にかなりのスペース(おそらく2カラム分)を占めるようにするトリックを知っていますか?
カイルストランド

@KyleStrandどのくらいハックしたいですか?これを試してください:(set conceallevel=1 | syntax match longdash '—' conceal cchar=-このコマンドの最初のダッシュはemダッシュで、2番目は全角ハイフンマイナスであることに注意してください。)
リッチ

表示に違いはありませんし、それがなぜ表示が2列を占めるのかもわかりません。偶然私の質問を誤解しましたか、それともあなたの提案を誤解している可能性がありますか?
カイルストランド

....実際、Vimの構文仕様については何も知りません。syntax matchコマンドは構文ファイルのコンテキスト外でも機能しますか?
カイルストランド

@KyleStrand私はあなたの質問を理解しました。その行をvimrcにコピーしてみましたか?または、Vimで実行するだけですか?:)
リッチ

3

フランス語のAZERTY Macキーボードで、Alt+を使用してダッシュを挿入でき-ます。走行距離は明らかに異なる場合があります。


2
Alt+-(というよりはOption+-面白くする)はMac固有のショートカットです。OS Xのどこでも動作しますが、viやvimとは関係ありません。
ash108

1
MacVimでは動作しますが、Terminal vimでは[Esc]に続いての-ように動作するため、通常モードに切り替わり、カーソルを前の行の先頭に置きます。
200_success


0

Richの素晴らしい答えに触発されて、vimrcに次の行を追加しました。

" For en/em dashes, respectively
autocmd FileType markdown imap -- –
autocmd FileType markdown imap --- —

御treat走のように動作します!


0

他のさまざまな回答で示唆されているように、ダッシュにはダイグラフが最適な方法です。しかし、任意のユニコード文字の場合、別の方法は^V挿入モードで使用することです(を参照:he i_CTRL-V_digit)。

たとえば、ダッシュの場合^Vu2013


私は今、これが実際にOPがすでにやっていたことだと気づきました!(ダッシュは2014年ではなく2013年ですが、それはemダッシュです。)しかし、これは答えの山のどこかにあるとまだ良いと思います。
震災
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.