プロが教えるわが家の防犯対策術!

vimのプロジェクト機能を使っている。左がファイルのリストが並んで、右がそのファイルの内容が表示されている。左のファイルの一覧でカーソルの移動コマンドのj,kを使って
1. リターンで右の画面に内容を表示してまた、その後に左の画面に移動させる。
2. ①以外の方法としてはmap leaderの¥で\vで右の画面に表示させる。これは、左の画面に移動させる必要は無い。

上記の操作をスクリプトで実行させたい。然し、エラーになって実行が出来ない。

normalコマンドでkを打鍵して、その後に<return>を打鍵したい。これをvim scriptでどの様に書いたら良いのだろうか。下記はエラーになる。
exec "normal k<cr>"
exec "normal k<return>"
exec "normal k".<cr>
exec "normal k".<return>

また、ここではmap leaderが"\"になっているのでnormalコマンドでは、\vでも同様の事は出来るがこのleaderを使ってのexecのnormalコマンドのvim scriptの書き方が分からない。

宜しくお願いします。

質問者からの補足コメント

  • うーん・・・

    質問は二つあってその内の一つのmap leaderを使わないnormalコマンドの書き方に付いては分かりました。これに付いては、<cr>とか<return>では無くて\<CR>とすれば良いです。但し、後一つのmap leaderを使ってのnormalコマンドのvim scriptの記述が分かりません。

    宜しく、お願いします。

      補足日時:2015/09/13 04:43
  • ソースは下記です。ftpluginのtext.vimです。
    exec "normal k\\v"
    exec "normal j\\v"
    上記はエラーになります。現在はこの部分をコメントにしています。そ
    れで、今コメントしている所をコメントアウトして動かしています。

    \\を<leader>にしても\<leader>にしてもエラーには成りませんが左の
    ファイル一覧にder>が表示されて動きません。

    何が問題なのか分かりません。

    " Vim filetype plugin
    " Language: Text
    " Maintainer: David Barnett <daviebdawg+vim@gmail.com>
    " Last Change: 2014 Jul 09

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/09/16 19:15
  • if exists('b:did_ftplugin')
    finish
    endif
    let b:did_ftplugin = 1
    let b:undo_ftplugin = 'setlocal comments< commentstring<'
    " We intentionally don't set formatoptions-=t since text should wrap as text.
    " Pseudo comment leaders to indent bulleted lists.
    etlocal comments=fb:-,fb:*
    setlocal commentstring=
    nmap <buffer> <silent> <right> :call Down()<cr>
    nmap <buffer> <silent> <left> :call Up()<cr>

      補足日時:2015/09/16 19:18
  • function! Up()
    if bufname("%")== "project.txt"
    exec "normal k\\v"
    " try
    " exec "normal k\<CR>"
    " catch
    " echo "Err"
    " exec "normal :set ft=memo\<CR>"
    " exec "normal :set tw=64\<CR>"
    " exec "normal \<C-W>h"
    " endtry
    endif
    endfunction

      補足日時:2015/09/16 19:19
  • うーん・・・

    function! Down()
    if bufname("%")== "project.txt"
    exec "normal j\\v"
    " try
    " exec "normal j\<CR>"
    " catch
    " echo "Err"
    " exec "normal :set ft=memo\<CR>"
    " exec "normal :set tw=64\<CR>"
    " exec "normal \<C-W>h"
    " endtry
    endif
    endfunction

      補足日時:2015/09/16 19:19

A 回答 (4件)

map <leader>K :normal j<cr>


\Kでjを打ったのと同じ。
この回答への補足あり
    • good
    • 0
この回答へのお礼

有難う御座います。
map <leader>K :normal j<cr>
\Kでjを打ったのと同じ。

上記の部分は意味は分かりませんが。全く違います。
vimでコマンドモードで:Project project.txtでProjectモードにしま
す。この時に左はファイルの一覧リストが右側には、その内容が表示さ
れます。

この時に左側でj\vは、下に移動してそのファイルの内容が表示されま
す。同様にk\vは、上に移動してそのファイルの内容を表示します。こ
の時のカーソルは左のファイル一覧の位置にあります。

現在は、\vの動作が出来ませんのでその代わりとして、<Return>して
カーソルを右に移動して内容を表示して。その後に苦肉の策として
<C-W>hとしてカーソルを左に移動しています。

本来は\vだけで良いのですが。\vの動作をvim scriptでコーディング出
来ません。異なる動作をします。その為に、現在は下記で代用していま
す。

k\vを下記でシュミレート
exec "normal k\<CR>"
exec "normal \<C-W>h"

j\vを下記でシュミレート
exec "normal j\<CR>"
exec "normal \<C-W>h"

どうしてもこの\をexec "normal ..."の中にいれる事が出来ない。これ
が今問題です。

最初はシュミレートの方法でも分からなかったと言う事で二つの質問を
出しましたが。シュミレートの方法は分かりましたので。残りの一つの
map leaderのnormal コマンドの記述のみが分からない状況です。唯、
運用しては、今は問題無く動いているので支障は無いのですが。

将来的にどうしてもこの機能が無いと使えなくなった場合を考えればこ
の問題は今のうちに解決をしたいと思って投稿しました。

宜しくお願いします。

お礼日時:2015/09/16 19:12

私の環境では「exec "normal j\\v"」で期待された(j \vを入力したかのような)動作します。


ちなみに、vimのバージョンは7.3.515です。
    • good
    • 0
この回答へのお礼

有難う御座います。

vimのバージョンは、7.4.475です。
j\\vとかk\\vとかすると、functionの中でエラーになります。
なので、今は別の方法でtry catch文でスルーしています。

今分からないのはその部分だけです。多分、leaderの指定に問題が有るのではと思っているのですが。???

nmap <buffer> <silent> <right> :call Down()<cr>
nmap <buffer> <silent> <left> :call Up()<cr>

function! Up()
if bufname("%")== "project.txt"
exec "normal k\\v"
" try
" exec "normal k\<CR>"
" catch
" echo "Err"
" exec "normal :set ft=memo\<CR>"
" exec "normal :set tw=64\<CR>"
" exec "normal \<C-W>h"
" endtry
endif
endfunction

function! Down()
if bufname("%")== "project.txt"
exec "normal j\\v"
"try
" exec "normal j\<CR>"
"catch
" echo "Err"
" exec "normal :set ft=memo\<CR>"
" exec "normal :set tw=64\<CR>"
" exec "normal \<C-W>h"
"endtry
endif
endfunction

お礼日時:2015/09/17 00:52

>\\を<leader>にしても\<leader>にしてもエラーには成りませんが左の


>ファイル一覧にder>が表示されて動きません。

<leader>はmapでしか使用できないようです。
exec "normal ... で<leader>を使用すると上記の結果になります。

こちらでも、text.vimの動作を確認しましたが、期待される動作してます。
vimのバージョンの違いかプラットフォームの違いでしょうか?
ちなみに、テストした環境はFedora 16です。
    • good
    • 0
この回答へのお礼

有難う御座います。
私の環境は、Windows7です。

OSの環境の違いなのでしょうか。

お礼日時:2015/09/17 17:30

exec "normal" "k" . "\\" . "v"

    • good
    • 0
この回答へのお礼

有難う御座います。
下記のエラーメッセージが出ます。
引用符が有りません。エラー"v&quot;


一応、初期の計画をしていた物は出来ていますので。
ここで締め切らせていただきます。

何かしっくりとは来ませんが。有難う御座いました。

お礼日時:2015/09/17 17:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!