wafuの技術

技術習得の努力メモです。

VIの使い方 メモ

viの使い方

間違っているかも知れません。

 

■上下左右の移動

h 左

s 下

k 上

l 右

 

■移動

w 一番右へジャンプ

b 一番左へジャンプ

0 行の先頭へジャンプ(^やhomeキー)

$ 行の末尾にジャンプ(Endキー)

 

H 画面の一番上の行にジャンプ

M 画面の中央の行へジャンプ

L 画面の一番下の行にジャンプ

 

gg ファイルの先頭行へジャンプ

G ファイルの末尾行にジャンプ

:<行番号> 行番号に移動

 

{ 段落の先頭へ移動

} 段落の末尾に移動

 

 

 

■スクロール

CTRL + b 一画面上

CTRL + f 一画面下

CTRL + d 半画面上

CTRL + u 半画面下

CTRL + e 1行上

CTRL + y 1行下

 

コピーアンドペースト

V 選択の開始

 

yy、Y カーソルのある行をコピー

p コピーしたものをペースト

dd 行の切り取り

3dd カーソル位置から3行を切り取り

 

■削除

dd カーソルのある行を削除

x 1文字削除

X カーソル位置の前の文字の削除

d 移動キーの操作に従って削除

 

■その他

U 直前の作業を取り消し

ctrl+r リドウ やり直しのやり直し

 

:set number 番号表示

:set visualbell t_vb=   空白だと音が出なくなる?

:set vb t_vb=

:set noerrorbells エラーの時に音が出なくなる?

※visualbellが視覚表示らしい

 

■操作

:e ファイル名  ファイルオープン

:sp 画面横2分割

:vs 画面縦2分割

:e . ファイラーを開く

:sp. ファイラーを分割画面で開く

:vs. ファイラーを縦割り分割画面で開く

m<任意の英字> マーク

’<任意の英字> マークしたところへジャンプ

:m' <任意の英字> マークしたところへ移動

:! <コマンド> コマンドを実行する

 

■編集モード

i カーソルの位置で編集モード

a カーソルの右側で編集モード

o カーソルの下へ1行追加して編集モード

O カーソルの上へ1行追加して編集モード

shift+i 先頭に移動して編集モード

shift+a 行末に移動して編集モード

 

■編集モードの終了、ファイルの保存

ZZ or wq 保存して終了

:q! 保存せずに終了

:q 終了

 

■検索

/<文字列>

n 次へ

N  前へ

f<任意の1文字> その行の文字検索 右方向

F<任意の1文字> その行の文字検索 左方向

 

■置換

r 1文字置換

:s/<置換前の文字列>/<置換後の文字列>

:%s/<置換前の文字列>/<置換後の文字列>/gc

OCRAのエラー 「libgmp-10.dllが見つからないため」

Ruby3で、OCRAで実行ファイルはできました。

しかし、次のエラーです。

 

libgmp-10.dllが見つからないため、コードの実行を続行できません。
プログラムを再インストールすると、この問題が解決する可能性があります。

 

これは、以前の対応と同じです。

 


ocra sample.rb  --dll ruby_builtin_dlls\libgmp-10.dll

 

コマンドの入力が増えると面倒です。

何か設定があるとうれしいのですが・・・・

OCRAがアップデートするとよいのでしょうか。

 

面倒なのでバッチファイルを作ります。

ocras.bat

・中身

ocra %1 --dll ruby_builtin_dlls\libgmp-10.dll

・使用方法

ocras sample.rb

 

 

OCRAのエラー 「fiber.soが見つかりません。」

Ruby3.1で、OCRAを実行すると、エラーが出てきました。

 

■状況

C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/ocra-1.3.11/bin/ocra:1188:in `initialize': No such file or directory @ rb_sysopen - *****/fiber.so (Errno::ENOENT)

 

fiber.soファイルが見つからないようです。

調べましたが、このファイルはRubyディレクトリにありません。

 

■対応

Ruby2.7のディレクトリを確認すると「fiber.so」が見つかりました。

このファイルを、ディレクトリにコピーすると、実行ファイルを作ることができました。

最終的に動作をしましたが、なにか問題もあるかもしれません。

 

そして、次のエラーです。

RubyとPythonのtkでListview


RubyPythonのtkでリストビューを作ってみました。

RubyPythonも本当によく似ています。

 

Rubyの例

# coding: utf-8
require 'tk'

$tree = Tk::Tile::Treeview.new()

#列インデックスの作成
$tree['columns'] = ['1','2','3']

#各列の設定
$tree.column_configure("1", :width => 100)
$tree.column_configure('2', :width => 100, :anchor => 'center')
$tree.column_configure('3', :width => 100, :anchor => 'center')

# 各列のヘッダー設定(インデックス,テキスト)
$tree.heading_configure("1", :text => '日付')
$tree.heading_configure('2', :text => '内訳')
$tree.heading_configure('3', :text => '金額')

# レコードの作成
# 1番目の引数-配置場所(ツリー形式にしない表設定ではブランクとする)
# 2番目の引数-end:表の配置順序を最下部に配置
#             (行インデックス番号を指定することもできる)
# 3番目の引数-values:レコードの値をタプルで指定する
$tree.insert('', 'end', :values => ["2017/5/1","食費",3500])
$tree.insert('', 'end', :values => ["2017/5/10","光熱費",7800])
$tree.insert('', 'end', :values => ["2017/5/10","住宅費",64000])

#表スタイルの設定
$tree["show"] = "headings"        #表示をlistviewにする

#画面表示

$tree.pack()

Tk.mainloop

 

Rubyの例(選択行の検出)

# coding: utf-8
require 'tk'

#呼び出し関数    選択した行を表示
def select_record()
    # 選択行の判別
    record_id = $tree.focus_item()
    # 選択行のレコードを取得
    record_values = $tree.itemcget(record_id, 'values')

    puts(record_values[0])   #選択した行を表示

end

 

$tree = Tk::Tile::Treeview.new()

#選択行を検出
$tree.bind("<TreeviewSelect>",proc{select_record})

#列インデックスの作成
$tree['columns'] = ['1','2','3']


#各列の設定
$tree.column_configure("1", :width => 100)
$tree.column_configure('2', :width => 100, :anchor => 'center')
$tree.column_configure('3', :width => 100, :anchor => 'center')

# 各列のヘッダー設定(インデックス,テキスト)
$tree.heading_configure("1", :text => '日付')
$tree.heading_configure('2', :text => '内訳')
$tree.heading_configure('3', :text => '金額')

# レコードの作成
# 1番目の引数-配置場所(ツリー形式にしない表設定ではブランクとする)
# 2番目の引数-end:表の配置順序を最下部に配置
#             (行インデックス番号を指定することもできる)
# 3番目の引数-values:レコードの値をタプルで指定する
$tree.insert('', 'end', :values => ["2017/5/1","食費",3500])
$tree.insert('', 'end', :values => ["2017/5/10","光熱費",7800])
$tree.insert('', 'end', :values => ["2017/5/10","住宅費",64000])

#表スタイルの設定
$tree["show"] = "headings"        #表示をlistviewにする

$tree.pack()

Tk.mainloop

 

Pythonの例

import tkinter as tk
from tkinter import ttk

def select_record(event):
    # 選択行の判別
    record_id = tree.focus()
    # 選択行のレコードを取得
    record_values = tree.item(record_id, 'values')
    print(record_values[1])
    tree.delete(record_id)
# 列の識別名を指定
column = ('ID', 'Name', 'Score')
# メインウィンドウの生成
root = tk.Tk()
root.title('List')
root.geometry('400x300')
# Treeviewの生成
tree = ttk.Treeview(root, columns=column)
tree.bind("<<TreeviewSelect>>", select_record)
# 列の設定
tree.column('#0',width=0, stretch='no')
tree.column('ID', anchor='center', width=80)
tree.column('Name',anchor='w', width=100)
tree.column('Score', anchor='center', width=80)
# 列の見出し設定
tree.heading('#0',text='')
tree.heading('ID', text='ID',anchor='center')
tree.heading('Name', text='Name', anchor='w')
tree.heading('Score',text='Score', anchor='center')
# レコードの追加
tree.insert(parent='', index='end', iid=0 ,values=(1, 'RUBY',80))
tree.insert(parent='', index='end', iid=1 ,values=(2,'PYTHON', 90))
tree.insert(parent='', index='end', iid=2, values=(3,'C++', 45))
tree.insert(parent='', index='end', iid=3, values=(4,'C#', 60))
tree.insert(parent='', index='end', iid=4, values=(5,'Java', 99))
# ウィジェットの配置
tree.pack(pady=10)

root.mainloop()

Rubyでfiddle(1) メモ帳を操作

rubyでfiddleを使用して、windows11のメモ帳を操作して見ました。

windows10までのメモ帳は値の変更が必要です。

 

require "fiddle/import"
require 'fiddle/types'

module WIN32API
  extend Fiddle::Importer
  dlload 'C:\\Windows\\System32\\user32.dll'
  include Fiddle::Win32Types 
  extern 'HWND FindWindowEx(HWND,HWND,char*,char*)'
  extern 'int SendMessage(HWND,UINT,char*,char*)'

end

 

hwnd = WIN32API.FindWindowEx(0,0,"Notepad",0)

hwnd = WIN32API.FindWindowEx(hwnd, 0, "RichEditD2DPT", 0);    #Windows11

#メモ帳に文字列を送る
#WM_SETTEXTは12
WIN32API.SendMessage(hwnd, 12, 0, "kanji");

 

 

hwndのNULLの判定は、hwnd.null?でできるようです。

 

Realforceの寿命とメンテナンス  追記

※追記です。

ショックなことに、Realforceはラバードームが劣化して固くなるようです。

当たり前といえば当たり前でした。

安いキーボードが、だんだん柔らかくなってきていたので、誤解していました。

こんなことなら、買い換えの負担の少ないキーボードをたくさん味わってみようかなと思います。

 

Realforceの調子が悪くなってきました。

(そんな気がするだけかもしれません。)

■状況

 Realforceを使っていると肩がこるようになりました。

 そこで、感じたのは「キーが重い」です。

 たしかに触れると55グラムとか40グラムとかの感じではありません。

 固くて、キーの戻りも悪い感じです。

 このキーボードは7年ぐらい使っています。

 購入時のスコスコ感はなくなっています。

 

 15年くらいメインのキーボードはRealforce91UBKを使用しています。

 現在は2台目のRealforceです。

 

■壊した記憶

 7年前にも同じことを感じて、分解したりしているうちに

 最後は壊してしまいました。

 ほとんどバラバラにして、あれやこれやしたりしました。

 分解してゴムを保護するスプレーをシリコンにかけたら、

 伸びてしまいました。もうダメな感じです。

 これが、1台目のRealforceです。

 

 7年使ったのだから、もういいのかなとも思いますが、

 文字が剥がれていないのは、さすが高級キーボードです。

 本当は使い込む毎に、キーが軽くなってくれたほうが、

 使った感があります。

 

■発見した対策

 前回は壊したので、今回は慎重に観察します。

 キーボード前の下側の爪を外すと筐体が外れます。

 筐体からキーボードを外すと、基板の下側にキー毎に二つの穴があります。

 キーの空気抜きのような感じの穴です。

 この穴にダスターで空気を思い切り入れます。

 これで重さが戻った気がします。

 特に説明はつきません。

 

Dovecotの編集

久しぶりにDovecotを触りました。

pop3が動作しているようなので停止させたいのですが、

以前は、設定ファイルを直接編集しのですが、

現在のやり方がわかりません。

 

いろいろ調べると、
 10-master.confファイルを設定するようです。
 少し気持ち悪いですが、
 port番号を0にすれば良いようです。


service pop3-login {
  inet_listener pop3 {
  port = 0         ←これを追加
    #port = 110
  }
  inet_listener pop3s {
    #port = 995
    #ssl = yes
  }
}

 

 

本当はここから調べたかったけど見つかりませんでした。
Deovecotのマニュアル
https://doc.dovecot.org/admin_manual/running_dovecot/