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

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

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

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

Q&A

解決済

2回答

1920閲覧

サーバー上でvimを使用しファイルを開くとファイルの書き込みを行えない。

yuki_90453

総合スコア326

Vim

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

0グッド

0クリップ

投稿2017/02/18 10:25

いつもお世話になっております。
サーバー上で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

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

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

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

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

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

guest

回答2

0

ベストアンサー

バックアップファイルの書き込みが失敗していそうです。
set backupdir をコメントアウトしてみてください。

それで問題が解決するならば、存在するディレクトリを指定すればよいかと思います。

投稿2017/02/18 10:37

ryunix

総合スコア1656

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

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

ryunix

2017/02/18 10:46

ちなみに、:w した後にエラーメッセージが表示されると思います。 それを読めば解決が早いと思います。
guest

0

ファイルのパーミッション確認しました?

投稿2017/02/18 10:28

turbgraphics200

総合スコア4267

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

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

yuki_90453

2017/02/18 10:33

回答ありがとうございます。 はい、所有者をrootにし権限を7で与えてみましたが挙動が変わりませんでした。 root権限でも所有者がroot以外だと書き込みを行えないのでしょうか?
turbgraphics200

2017/02/18 11:16

すいません。わかりませんね。念のためフォルダのパーミッションも確認してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問