サーバー上でvimを使用しファイルを開くとファイルの書き込みを行えない。
解決済
回答 2
投稿
- 評価
- クリップ 0
- VIEW 1,466
いつもお世話になっております。
サーバー上でvimを使用しファイルを開くとファイルの書き込みを行えなくて困っています。
強制上書き(:w!)であれば問題なく書き込みが出来るのですが、この状態で使い続けるのは困るのでなんとかしたいと考えています。
ファイルはRootで編集しているので権限の問題ではないかと思います。
また下記の設定ファイルを書き込んでから、上記のような挙動になったので設定ファイルに問題があるのではないかと思います。
下記の設定ファイルに怪しい部分などがあればご指摘頂けないでしょうか?
" 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
syntax on
" オートセーブ オン
let g:auto_save = 1
let g:auto_save_in_insert_mode = 0
let g:auto_save_silent = 1
" アンドゥの永久化
set undodir=~/vim/undo
set backupdir=~/vim/backup
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
"-----------------------------------------------------------------------
" CentOS
"-----------------------------------------------------------------------
set backspace=indent,eol,start
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
バックアップファイルの書き込みが失敗していそうです。
set backupdir をコメントアウトしてみてください。
それで問題が解決するならば、存在するディレクトリを指定すればよいかと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
-1
ファイルのパーミッション確認しました?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.10%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/02/18 19:46
それを読めば解決が早いと思います。