質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

Q&A

解決済

1回答

1874閲覧

vimでコードの自動補完と同時に不思議な空間が挿入される

hati-mitu

総合スコア7

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

0グッド

0クリップ

投稿2020/04/05 08:20

前提

vim初学者です。
iTermからmac vimを使用しています。

発生している問題

コードの自動補完と同時におかしな空間、特殊文字のようなものが挿入されてしまいます。
イメージ説明
イメージ説明
ここにカーソルをおくと動けなくなってしまいます。5回くらい連打すると動けます。
見た目は1文字だけど中身は5文字のように感じます。
イメージ説明

実現したいこと

不思議な空間をなくして、自動補完が終わった状態を下図のようにしたいです。
この状態でエンターを押すと自動でインデントが入るようにしたいです。
イメージ説明

自分の.vimrc

関係がありそうな部分のみ抜粋します。
不足があれば教えていただければと思います。

set expandtab " タブ入力を複数の空白入力に置き換える set tabstop=2 "画面上でタブ文字が占める幅 set softtabstop=2 "連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅 set autoindent " 改行時に前の行のインデントを継続する set smartindent " 改行時に前の行の構文をチェックし次の行のインデントを増減する set shiftwidth=2 " smartindentで増減する幅 " 不可視文字を可視化(タブが「▸-」と表示される) set list listchars=tab:\▸\- "---------------------------------------------------------- " neocomplete・neosnippetの設定 "---------------------------------------------------------- if neobundle#is_installed('neocomplete.vim') " Vim起動時にneocompleteを有効にする let g:neocomplete#enable_at_startup = 1 " smartcase有効化. 大文字が入力されるまで大文字小文字の区別を無視する let g:neocomplete#enable_smart_case = 1 " 3文字以上の単語に対して補完を有効にする let g:neocomplete#min_keyword_length = 3 " 区切り文字まで補完する let g:neocomplete#enable_auto_delimiter = 1 " 1文字目の入力から補完のポップアップを表示 let g:neocomplete#auto_completion_start_length = 1 " バックスペースで補完のポップアップを閉じる inoremap <expr><BS> neocomplete#smart_close_popup()."<C-h>" " エンターキーで補完候補の確定. スニペットの展開もエンターキーで確定・・・・・・② imap <expr><CR> neosnippet#expandable() ? "<Plug>(neosnippet_expand_or_jump)" : pumvisible() ? "<C-y>" : "<CR>" " タブキーで補完候補の選択. スニペット内のジャンプもタブキーでジャンプ・・・・・・③ imap <expr><TAB> pumvisible() ? "<C-n>" : neosnippet#jumpable() ? "<Plug>(neosnippet_expand_or_jump)" : "<TAB>" endif

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

補間はあくまでも候補を表示してくれるものです.画像のものはスニペット (neosnippet) を展開したものだと思います(設定を見る限り,Enterキーを押した後に画像のような状態になったのだとおもいます)

スニペットは,ジャンプ先を設定することができます.(質問者さんの設定では Tab キーをおせばジャンプができそうです)
このジャンプ先の目印が <`0:TARGET`> とかで,自動的に挿入されます.vim の conceal という機能で通常は見えないようになっています.

自動補完が終わった状態を下図のようにしたいです。

これはスニペットを編集することで解決できます.
:NeoSnippetEdit コマンドを実行することで編集できます.

これは ruby なんですかね...?
たとえば ruby のデフォルトのスニペットは ここ にあります.

こんな感じです.

ruby

1snippet if 2abbr if ... end 3 if ${1:#:condition} 4 ${0:TARGET} 5 end

これをまねて, :NeoSnippetEdit で出てきた snip ファイルに,

ruby

1snippet if 2abbr if ... end 3 if ${1:#:condition} 4 end

などと書き込み,保存すればよいです.

詳細は :help neosnippet などで確認できます.

投稿2020/04/05 09:30

luma

総合スコア183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hati-mitu

2020/04/06 07:10

ありがとうございます! 思った通りに設定することができました! 非常に丁寧な説明でとても分かりやすかったです! 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問