ラベル vim の投稿を表示しています。 すべての投稿を表示
ラベル vim の投稿を表示しています。 すべての投稿を表示

2021年7月17日土曜日

VSCodeでVimを使っていたときの設定

使わなくなったので供養として置いておく


setting.jsonにこういうのを書いていた。


  // https://github.com/VSCodeVim/Vim

"vim.easymotion": true,
"vim.incsearch": true,
"vim.useSystemClipboard": true,
"vim.useCtrlKeys": true,
"vim.hlsearch": true,
"vim.insertModeKeyBindings": [
{
"before": ["j", "j"],
"after": ["<Esc>"]
}
],
"vim.normalModeKeyBindings": [
{
"before": ["<C-j>"],
"after": ["1", "0", "j"]
},
{
"before": ["<C-k>"],
"after": ["1", "0", "k"]
},
{
"before": ["<C-h>"],
"after": ["1", "0", "h"]
},
{
"before": ["<C-l>"],
"after": ["1", "0", "l"]
},
{
"before": ["down"],
"after": ["g", "j"]
},
{
"before": ["up"],
"after": ["g", "k"]
},
{
"before": ["j"],
"after": ["g", "j"]
},
{
"before": ["k"],
"after": ["g", "k"]
}
],
// "vim.normalModeKeyBindingsNonRecursive": [
// {
// "before": ["<leader>", "d"],
// "after": ["d", "d"]
// },

// {
// "before": ["<C-n>"],
// "commands": [":nohl"]
// }
// ],
"vim.leader": "<space>",
"vim.handleKeys": {
"<C-a>": false,
"<C-f>": false,
"<C-c>": false,
"<C-v>": false,
"<C-x>": false,
"<C-shift+b>": false
},
// https://github.com/VSCodeVim/Vim/issues/2007
"vim.normalModeKeyBindingsNonRecursive": [
{
"before": ["u"],
"after": [],
"commands": [
{
"command": "undo"
}
]
},
{
"before": ["<C-r>"],
"after": [],
"commands": [
{
"command": "redo"
}
]
}
],
// https://girigiribauer.com/tech/20190212/
"vim.whichwrap": "h,l,<,>,[,]",

2019年12月17日火曜日

英文を1行1文なるようにvimで整形する

PDFからコピペしたときなど、英文を1行1文に改行したいときがあります。vimでの整形します。

文頭が行頭になるようにする


This
is
my pen.

を

This is my pen.

とするには
:g/\w\s\?$\n[a-z]/ join
とします。

g/ / join はファイル全体でマッチしたものにjoin適用の意味

\w\s\?$  は文字(とスペース)で行末
\n  改行
[a-z]  小文字にマッチ

これだと3行ある場合は2回マッチしないとダメです。

This
is
my pen.

は

This is
my pen.

になるので、もう一度実行します。

1行に2文あるときも改行する



Hello.
This is my pen.

を

Hello.
This is my pen.

というようにするには、

:%s/\.\zs\s\ze[A-Z]/\r/gc

とするとピリオドと大文字の間のスペースにマッチして、それを改行(\r)に置換します。


2019年9月29日日曜日

rstファイルをvimで編集リアルタイム更新

rstファイルをリアルタイムでプレビューできるriv.vimをインストールしました。ちょっと大変でした。Python2と3が混ざっている感があります。

Ubuntu16.04 LTS ではOK。
Windowsでは×です。

インストール方法(無理やり感あり)


riv.vim (vim) とInstantRst (web server) を組み合わせます。サーバはflaskと同じ仕組みを使っているようです。

riv.vim, InstanRstを入れる。instant-rst.pyを入れる。こちらはPython2.7用しかないので、追加の設定が要りました。

・python2.7のディレクトリのパーミッションを追加する。

pipでThe directory '/home/.../.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

と出るので sudo -H でインストールしました。

・python2.7のPATHを追加する。


 instantRst test.rst で起動すると、こんなエラーが出ていました。
 instantRst -f test.rst
test.rst
WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved performance.
 * Serving Flask app "instant_rst.server" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off

Some error/exception occurred.
(, TypeError('port must be an integer',), )


Portがintになっていないということで見てみると、Python2から3に値を渡すときに変換されているということでした。

エラーの該当部分はpython2.7/dist-packages/werkzeug/serving.py で、追加した結果はこうなりました。

port = int(native(port))  

if not isinstance(port, int):
    raise TypeError("port must be an integer")

入力されるportをtype(port)として調べると、型は future.types.newint.newint となっており、これは

from future.utils import native
int(native(port))

でintにできました。nattive(port) によって long にしてからint を使っています。

https://python-future.org/what_else.html

これで無事にInstantRstサーバが立ち上がって、ほぼリアルタムでrstファイルの更新ができます。

使い方メモ

起動するには、vim で rstファイルを開いた状態で
:InstantRst
これでブラウザが立ち上がります。

デフォルトのブラウザはfirefoxですが、
let instant_rst_browser='usr/bin/google-chrome'
とすることでクロムに変えました。vimrcにこれを書いても効果ないようです。

2018年7月12日木曜日

gvim Ubuntuで右クリックでポップアップメニューを出せるように

 ubuntu16.04でgvimを使っていて、コピー、ペーストをするための右クリックのポップアップメニューが出ない・・・ので調べて直しました。
 :set mousemodel=popup
これでOKです。
:help popup-menu
の該当部分を読んでみると、なんだか別の設定なのですが・・・まぁ望み通りの動きをしているからよいことにしましょう。
 3.2 Selection with Mouse                *gui-mouse-select*
The mouse can be used to start a selection.  How depends on the 'mousemodel'
option:
'mousemodel' is "extend": use the right mouse button
'mousemodel' is "popup":  use the left mouse button, while keeping the Shift
key pressed.
参考
https://superuser.com/questions/646097/fixing-the-right-click-menu-in-gvim-in-ubuntu

2018年7月11日水曜日

gvimのGLib-GObject-WARNING



vim-gnomeを閉じるときに、こういうWARNINGが出ます。17699はプロセスIDなので任意。
(gvim:17699): GLib-GObject-WARNING **: cannot retrieve class for invalid (unclassed) type '<invalid>'
バグのようですが、気にしないでよいそうです。

https://askubuntu.com/questions/334219/gvim-produces-error-when-hitting-the-close-window

vim-gnomeをアンインストールして、vim-gktを使うように言っている回答もありますが・・・。

2018年6月12日火曜日

vim基本的なことメモ

vimを使い始めたのでメモです。

目次:
vimインストール
基本的なことのメモ
vimrcのrcってなんだろう

vimインストール

ubuntu16.04

$ gvim と入力するとエラーメッセージ。代わりに候補が。

The program 'gvim' can be found in the following packages:
 * vim
 * vim-gnome
・・・

こちらに詳しく書いてあったので略。
http://zorinos.seesaa.net/article/451348076.html

自分としてはvim-gtkが良さそうです。

■vim-gtkインストール

sudo apt-get install vim-gtk

起動は

gvim

です。 (vim-gtkと打っても立ち上がりません)

基本的なことのメモ

.vimrcファイルどこ→/home/userです。:version で調べられます。 :echo $HOME で出てきます。

% は自分自身。

同じファイルを開き直すのは%(自ファイル)を使います。開いている間に更新されたはずのログファイルを開き直すとか。

:source % 
でファイルを読み込み直す。

substitude で、%s:foo/bar/ と%があると、全体を検索。s:foo/bar/ だと、カレントラインだけを検索する。
 
■コマンド

gg 最初の行へ
G 最後の行へ

dd その行を切り取り
yy その行ヤンク(コピー)
p ペースト(カーソルの下に)
P ペースト(カーソルの上に)

[数字]で倍数を指定できます。

[数字]yy で数字行だけコピー


:tabnew 新しいタブを開く:tabnでも

gt 次のタブへ


map

Ctrl-V でペーストする。ただし挿入モードのみ。Alt-E-Pという操作をimapしました。
"Insert mode Ctrl-V Paste from clipboard
imap <C-V> <M-E>p

Tips


差分を見る gvimdiff

左右に並べるために、:vs で分割し、比べる2つを表示します。どちらも :difft[his] を入力すると、diffで差分を表示します。

行をハイライトするが、行全体ではなく、番号だけをハイライトしたいとき。写経のときに便利です。

set cursorline
hi clear CursorLine

gvimでスペルチェックをON/OFFする

:set spell
:set nospell

修正候補を出すときは、赤線の上で
z=
間違いではないので辞書登録するときは
zg (goodの意味)

日本語のスペルチェックはないようです。2018/12現在

コードのときはソースコード内は読まずにコメント部分に関してスペルチェックをしてくれるようです。

■カレントファイルパスをコピーする。

:let @" = expand("%:p")   

のあとにpでプットできる。

"(レジストリ)に%:p をコピーする?ということでしょうか。覚えられません・・・。

VIM正規表現

■行末の空白(trailing whitespace)を消す

:%s/\s\+$//gc

:%s/  検索開始
\s スペース
\+$ 1文字以上あって末尾
//gc 空白と置換して消す

例えばpycodestyleでひっかかるので行末のスペースだけを消したいときに使いました。
 ■vim正規表現で①を# ①に置き換える

コード例で、解説のために①などの番号がついているときがあります。このままコピーしてしまうとコードが動かないのでコメントアウトしたいと思います。

(前)
def hoge:  ①

(後)
def hoge:  # ①


:%s/\(①\|②\|③\|④\|⑤\|⑥\|⑦\|⑧\|⑨\)$/# \1/gc

行末にある①〜⑨をORでマッチして、# 後方参照 で確認しながら変更します。

■vimでor検索

括弧と | をエスケープしないとだめ

\(aaa\|bbb|)

これで aaa または bbb にマッチする

■vimの非貪欲non-greedyマッチ

.*

これを

.\{-}

こうする

■Vim のウィンドウ高さを最大にする。
Windows
<Win> + Shift + ↑

Ubuntu
ショートカットはないので
:set lines=120

などで調整する。

■ 検索で大文字小文字を制御する

/hoge\c 大文字小文字を区別しない

/hoge\C 大文字小文字を区別する

:set ignorecase いつでも無視する設定

■ vimで印刷時にヘッダを消す

:set printoptions=header:0


調べたこと豆知識

■vimrcのrcってなんだろう

と思って調べると諸説あるようです。
https://stackoverflow.com/questions/11030552/what-does-rc-mean-in-dot-files
http://www.faqs.org/docs/artu/ch10s03.html#id2941902

    run commands
    resource control
    run control
    runtime configuration

The ‘rc’ suffix goes back to Unix's grandparent, CTSS. It had a command-script feature called "runcom". Early Unixes used ‘rc’ for the name of the operating system's boot script, as a tribute to CTSS runcom.

UNIXの祖であるCTSSでは"runcom"というシステムブートファイルがあって、rcはをれへのトリビュートである。

・・・ということでrun controlが歴史的な解釈のようです。

失敗・未解決


■(未解決)Windows gvimでテキストを開いたとき、
「続けるにはenterを押すかコマンドを入力してください」と出ます。これを出さずに直接ファイルを開いて欲しいのですが・・・。方法がわかりません。2個同時に開いたときも出るようです。

■deinが使えなかった失敗

■[soloved]

gvimでset autochdirが動作しない。と思ったら、.gvimrcを書き換えて再読み込みしないとできなかった。その場でsetしてもダメということのようです。

■設定ファイルの再読み込み
.gvimrcファイルを読みなおすときは、
:source .gvimrc

.vimrcにdeinの設定を入れれば良いのですが、.gvimrcに入れていたので読み込めていませんでした。なぜかdein#update()はできていましたので毎回それやっていました。という失敗。

■権限がない状態のファイルを保存する