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

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

ただいまの
回答率

90.51%

  • Vim

    512questions

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

vimにおいて連打系コマンドを入力すると1行上にズレる問題

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 509

yuki_90453

score 85

いつもお世話にお世話になっております。
vimにおいて、「dd」や「yy」、それに<CR>を入力すると1行上にずれてしまいます。

詳しい挙動

「dd」と入力時は1度目のdで上にカーソルが移動してしまいます。
NERDtreeではエンターキーを押すとカーソルの上にあるファイルが開かれます。
必ずこのような挙動になるわけではなく、70%ぐらいの確率でこういった挙動になります。
たまにまともに動く事もあります。

あと、jjjjと下にカーソル移動している際にkを押すと1度目では反応せず2度目で上に移動します。

おそらく設定ファイル、またはプラグインが問題を起こしているのではと思うのですが、一体どれが原因なのかわかりません。
ご指摘頂けないでしょうか。

設定ファイル

" dein settings {{{
" dein自体の自動インストール
let s:cache_home = empty($XDG_CACHE_HOME) ? expand('~/.vim') : $XDG_CACHE_HOME
let s:dein_dir = s:cache_home . '/dein'
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
if !isdirectory(s:dein_repo_dir)
  call system('git clone https://github.com/Shougo/dein.vim ' . shellescape(s:dein_repo_dir))
endif
let &runtimepath = s:dein_repo_dir .",". &runtimepath
" プラグイン読み込み&キャッシュ作成
let s:toml_file = fnamemodify(expand('<sfile>'), ':h').'/.dein.toml'
if dein#load_state(s:dein_dir)
  call dein#begin(s:dein_dir, [$MYVIMRC, s:toml_file])
  call dein#load_toml(s:toml_file)
  call dein#end()
  call dein#save_state()
endif
" 不足プラグインの自動インストール
if has('vim_starting') && dein#check_install()
  call dein#install()
endif
" }}}

"-----------------------------------------------------------------------
"Qfixhowm キーマップリーダー
"-----------------------------------------------------------------------
let QFixHowm_Key = 'g'

" howm_dirはファイルを保存したいディレクトリを設定
let howm_dir             = '~/Documents/memo'
let howm_filename        = '%Y/%m/%Y-%m-%d-%H%M%S.txt'
let howm_fileencoding    = 'utf-8'
let howm_fileformat      = 'unix'

" 個人的には以下を追加設定しておくのをおすすめします。
" キーコードやマッピングされたキー列が完了するのを待つ時間(ミリ秒)
set timeout timeoutlen=3000 ttimeoutlen=100
" プレビューや絞り込みをQuickFix/ロケーションリストの両方で有効化(デフォルト:2)
let QFixWin_EnableMode = 1


"-----------------------------------------------------------------------
"複数カーソル
"-----------------------------------------------------------------------
nnoremap <C-e> :MultipleCursorsFind

"-----------------------------------------------------------------------
" quickrun.vim
"-----------------------------------------------------------------------
nnoremap qr :QuickRun<CR> 
" <C-c> で実行を強制終了させる
" quickrun.vim が実行していない場合には <C-c> を呼び出す
nnoremap <expr><silent> <C-c> quickrun#is_running() ? quickrun#sweep_sessions() : "\<C-c>"
let g:quickrun_config = {
\   "_" : {
\       "runner" : "vimproc",
\       "runner/vimproc/updatetime" : 60,
\             "outputter/error/success" : "buffer",
\           "outputter/buffer/split" : ":botright 8sp",
\            "outputter/buffer/running_mark" : "バン(∩`・ω・)バンバンバンバン゙ン",
\                "hook/time/enable" : 1,
\   },
\}


"-----------------------------------------------------------------------
" NERDTreeを起動
"-----------------------------------------------------------------------
let file_name = expand('%')
if has('vim_starting') &&  file_name == ''
  autocmd VimEnter * NERDTree ./
endif
" サイドバー表示/非表示
nnoremap kb :NERDTreeToggle<CR> 
"横幅
let g:NERDTreeWinSize = 20


" クリップボード有効化
set clipboard+=unnamed
set clipboard+=autoselect

set vb t_vb= "音を出さないようにする

" 行番号表示
set number

" オートセーブ オン
let g:auto_save = 1
let g:auto_save_in_insert_mode = 0
let g:auto_save_silent = 1

" アンドゥの永久化
set undodir=$HOME/Vim/dotfiles
set backupdir=$HOME/Vim/dotfiles
set undofile

"折り返し
set wrap
set linebreak
set breakindent

"インデント
set shiftwidth=22


" vimを立ち上げたときに、自動的にvim-indent-guidesをオンにする
" let g:indent_guides_enable_on_vim_startup = 1
set list listchars=tab:\¦\ 

"-----------------------------------------------------------------------
" インデント関係
"-----------------------------------------------------------------------
" 改行時に前の行のインデントを継続する
set autoindent
" 改行時に入力された行の末尾に合わせて次の行のインデントを増減する
set smartindent
" タブ文字の表示幅
set tabstop=1
" Vimが挿入するインデントの幅
set shiftwidth=1
" 行頭の余白内で Tab を打ち込むと、'shiftwidth' の数だけインデントする
set smarttab

"-----------------------------------------------------------------------
" vimgrep
"-----------------------------------------------------------------------
nnoremap [q :cprevious<CR>   " 前へ
nnoremap ]q :cnext<CR>       " 次へ
nnoremap [Q :<C-u>cfirst<CR> " 最初へ
nnoremap ]Q :<C-u>clast<CR>  " 最後へ


" Anywhere SID.
function! s:SID_PREFIX()
  return matchstr(expand('<sfile>'), '<SNR>\d\+_\zeSID_PREFIX$')
endfunction

" Set tabline.
function! s:my_tabline()  "{{{
  let s = ''
  for i in range(1, tabpagenr('$'))
    let bufnrs = tabpagebuflist(i)
    let bufnr = bufnrs[tabpagewinnr(i) - 1]  " first window, first appears
    let no = i  " display 0-origin tabpagenr.
    let mod = getbufvar(bufnr, '&modified') ? '!' : ' '
    let title = fnamemodify(bufname(bufnr), ':t')
    let title = '[' . title . ']'
    let s .= '%'.i.'T'
    let s .= '%#' . (i == tabpagenr() ? 'TabLineSel' : 'TabLine') . '#'
    let s .= no . ':' . title
    let s .= mod
    let s .= '%#TabLineFill# '
  endfor
  let s .= '%#TabLineFill#%T%=%#TabLine#'
  return s
endfunction "}}}
let &tabline = '%!'. s:SID_PREFIX() . 'my_tabline()'
set showtabline=2 " 常にタブラインを表示

" The prefix key.
nnoremap    [Tag]   <Nop>
nmap    t [Tag]
" Tab jump
for n in range(1, 9)
  execute 'nnoremap <silent> [Tag]'.n  ':<C-u>tabnext'.n.'<CR>'
endfor
" t1 で1番左のタブ、t2 で1番左から2番目のタブにジャンプ

map <silent> [Tag]c :tablast <bar> tabnew<CR>
" tc 新しいタブを一番右に作る
map <silent> [Tag]x :tabclose<CR>
" tx タブを閉じる
map <silent> [Tag]n :tabnext<CR>
" tn 次のタブ
map <silent> [Tag]p :tabprevious<CR>
" tp 前のタブ


if has('mac')
  if has('gui_running')
    let IM_CtrlMode = 4
  else
    let IM_CtrlMode = 1

    function! IMCtrl(cmd)
      let cmd = a:cmd
      if cmd == 'On'
        let res = system('osascript -e "tell application \"System Events\" to keystroke (key code {104})" > /dev/null 2>&1')
      elseif cmd == 'Off'
        let res = system('osascript -e "tell application \"System Events\" to keystroke (key code {102})" > /dev/null 2>&1')
      elseif cmd == 'Toggle'
        let res = system('osascript -e "tell application \"System Events\" to keystroke (key code {55, 49})" > /dev/null 2>&1')
      endif
      return ''
    endfunction
  endif

  " 「日本語入力固定モード」のMacVimKaoriya対策を無効化
  let IM_CtrlMacVimKaoriya = 0
  " ctrl+jで日本語入力固定モードをOnOff
  inoremap <silent> <C-j> <C-^><C-r>=IMState('FixMode')<CR>
endif

"Rubyのファイルを開いたら自動でファイルタイプの設定
au BufNewFile,BufRead *.rb set filetype=ruby

プラグインリスト

# 基本は github.com のレポジトリーを指定するだけ
[[plugins]]
repo = 'Shougo/dein.vim'

[[plugins]]
repo = 'delphinus35/typescript-vim'
rev  = 'colorize-template-strings'

[[plugins]]
repo = 'elzr/vim-json'
if   = '''! has('kaoriya')'''

[[plugins]]
repo    = 'vim-airline/vim-airline'
depends = ['vim-airline-themes']

[[plugins]]
repo = 'vim-airline/vim-airline-themes'

[[plugins]]
repo = 'osyo-manga/vim-precious'
depends = ['context_filetype.vim']

[[plugins]] repo = 'Shougo/context_filetype.vim'

[[plugins]] # toml syntax
repo = 'cespare/vim-toml'
on_ft = 'toml'

[[plugins]]
repo = 'scrooloose/nerdtree'

[[plugins]]
repo =  'evidens/vim-twig'

[[plugins]]
repo =  'w0ng/vim-hybrid'

[[plugins]]
repo =  'Shougo/neocomplcache'

[[plugins]]
repo =  'Shougo/neocomplete.vim'

[[plugins]]
repo =  'Shougo/neocomplcache-rsense.vim'

[[plugins]]
repo =  'fuenor/qfixhowm'

[[plugins]] #使ってない
repo =  'fuenor/im_control.vim'

[[plugins]]
repo =  'thinca/vim-quickrun'

[[plugins]]
repo =  'vim-scripts/vim-auto-save'

[[plugins]]
repo =  'tpope/vim-endwise'

# [[plugins]]
# repo =  'nathanaelkane/vim-indent-guides'

[[plugins]]
repo =  'Yggdroot/indentLine'

# ログ・ファイルに色付けしてくれる
[[plugins]]
repo =  'vim-scripts/AnsiEsc.vim'

# コメントON/OFFを手軽に実行
[[plugins]]
repo =  'tomtom/tcomment_vim'

[[plugins]]
repo =  'Shougo/unite.vim'

# Unite.vimで最近使ったファイルを表示出来る
[[plugins]]
repo =  'Shougo/neomru.vim'


#Neobundleから移植

[[plugins]]
repo =  'Shougo/vimshell'

[[plugins]]
repo =  'sjl/gundo.vim'

[[plugins]]
repo =  'terryma/vim-multiple-cursors'

環境

mac
kaoriya-vim

追記
ターミナルはiTermを使用しております。dein.tomlは94行、2桁
vim設定ファイルは209、3桁です。
表示出来る行数は59行です。幅は234です。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ikedas

    2017/02/11 21:39

    ターミナルの画面の行数/桁数はいくらになっていますか。

    キャンセル

  • yuki_90453

    2017/02/11 21:45

    追記致しましたが、何か関係があるんでしょうか?

    キャンセル

  • ikedas

    2017/02/11 21:54 編集

    ファイルの行数ではなく、iTermの画面がありますよね。このスクリーショットで黒くなっているところです: https://www.iterm2.com/features.html その高さ (表示できる行数) と幅 (半角での桁数) がわかればと。

    キャンセル

  • yuki_90453

    2017/02/11 21:59 編集

    表示出来る行数は59行です。幅は234です。

    キャンセル

回答 1

checkベストアンサー

0

設定ファイル内で怪しそうなのは以下の部分です。

nnoremap kb :NERDTreeToggle<CR> 

k がマッピングされてしまっています。これが原因の一つでしょう。
ただ、これだけだとおっしゃられている現象全てが説明できない気がします。
j や <CR> などの怪しいキーにキーマッピングが設定されていないか確認してみてください。

:map <CR>

のようなコマンドを実行することで、キーマッピングの存在が確認できます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/11 23:21

    ご指摘ありがとうございます。
    該当部分をコメントアウトし、様子を見てみます。
    ちなみにjや<CR>はマッピングされてませんでした。

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Vim

    512questions

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