Ojisan

爆速が好き。爆乳は持て余す。がはは

WSLのNeovimで表示される^Mってなんぞ?

WindowsからWSLのNeovimに文章をコピペするとMや^Mが表示されることがある。 これは Windows と Unix 系(WSL / Linux / macOS)の改行コードの違いが原因。 見えているMや^Mは「見えないはずの制御文字が可視化されている」状態。 1. CRLF と LF の違い \r = CR(Carriage Return) \n = LF(Line Feed) 改行コードの種類 Windows CRLF = \r\n Mac / Linux LF = \n 2. Mや^Mの正体 なぜMや^Mになるのか \r(CR)は 制御文字 Neovim / Vim は制御文字を^表記で可視化する \r = ASCII 13 = Ctrl + M = ^M 末尾に見える^M Windows由来の CR (\r) が残っている 表示上Mに見えるケース フォントや listchars 設定の関係で ^Mが潰れてMに見えるだけ(中身は同じ\r) 3. Neovimで消す方法 ファイル全体から、CR(\r)という文字を全部削除するコマンド :%s/\r//g % : 範囲指定 s : substitute = 置換 /\r : 検索パターン // : 置換後の文字が空 g : globalフラグ これがないと、各行につき1個だけしか置換されない gをつけると、行内にある すべての一致を置換 全部つなげると : % → 全行に対して s → 置換を行い /\r → CR を探し // → 空文字に置き換え g → 行内のすべてを対象にする 構文的にはこう :s/{pattern}/{replacement}/{flags} 4. fileformat=unixでは消えない WSLで作成したファイルに、Windowsからコピペしたら、 ...

2026-01-14

.bashrcでのSSHキー登録処理を改良する

今まで.bashrcに書いていたssh-agentの起動とssh-addの方法だと、 WezTermの分割が増えるたびに、 SSHのパスフレーズを打ち直すのがずっと気になっていた。 だから、WSL起動時に一度聞かれるだけの動作に変更した。 ついでに、複数のカギを登録できるようにしておいた。 本来は、.profileや.bash_profileに書く内容だと思う。 ただ、WSL + WezTerm だとログインシェルとして扱われないことが多く、 うまく動かない場面があるらしい。 なので今回は、確実に実行される.bashrcに置くことにした。 keychain使えよ、って天の声は無視することにしている。 こちとら、ただ日記を書く環境を整えてるだけなんだ。 今までの.bashrc # --- ssh-agent auto start --- if [ -z "$SSH_AUTH_SOCK" ]; then eval "$(ssh-agent -s)" >/dev/null fi # 鍵が登録されていない場合のみ追加 ssh-add -l &>/dev/null if [ $? -ne 0 ]; then ssh-add ~/.ssh/xserver.key 2>/dev/null fi 改良した.bashrc # --- ssh-agent 永続化設定 --- SSH_AGENT_ENV="$HOME/.ssh/agent-env" # エージェント情報の読み込みと生存確認 if [ -f "$SSH_AGENT_ENV" ]; then . "$SSH_AGENT_ENV" > /dev/null fi # プロセスが動いていなければ新しく起動 if ! ps -p "$SSH_AGENT_PID" > /dev/null 2>&1; then ssh-agent -s > "$SSH_AGENT_ENV" . "$SSH_AGENT_ENV" > /dev/null fi # --- 複数の鍵を一括管理 --- # 追加したい鍵のフルパスをここに並べる KEYS=( "$HOME/.ssh/xserver.key" "$HOME/.ssh/another.key" "$HOME/.ssh/work.key" ) # エージェントに鍵が1つも登録されていない場合のみ実行 if ! ssh-add -l > /dev/null 2>&1; then echo "SSH Agent: Adding keys..." for key in "${KEYS[@]}"; do if [ -f "$key" ]; then ssh-add "$key" 2>/dev/null else echo "Warning: Key file not found: $key" fi done fi ポイント 生存確認の精度 ps -p “$SSH_AGENT_PID” を使うことで、OS再起動などでPIDが変わっても確実に検知して再起動します。 ...

2026-01-14

WSLでHugoのビルドとrsyncを自動化するシェルスクリプト

WSLでrsyncを使えるようになったので、デプロイ用のスクリプトを組んでアップロード作業をラクにしていきます。 1. deploy.shを作成 まずは、Hugoのプロジェクトルート(hugo.tomlがある場所)に、deploy.shを作成します。 実行権限を付与 chmod +x deploy.sh 権限付与は忘れがちだけど、これをしないと動かない。 deploy.sh #!/usr/bin/env bash set -e echo "Building site..." hugo --gc --minify echo "Deploying to server..." rsync -avz --delete public/ xs:yourdomain/public_html/ echo "Done!" ~/.ssh/configファイル 以前設定した、SSH接続の設定は以下の通り。 レンタルサーバー(エックスサーバー)へのSSH接続の例です。 Host xs HostName xxxxx.xsrv.jp User xxxxx Port 10022 IdentityFile ~/.ssh/xserver.key 2. スクリプトの説明 !/usr/bin/env bashとは? 「このスクリプトは bash で実行する」と宣言 set -eとは? どこかのコマンドがエラー(終了コード≠0)を返したら、即スクリプトを中断する ビルド失敗してるのに 空の public を rsync で –delete したらサーバーのファイルが消えるので、事故防止用のブレーキ hugo --gcとは? --gc : garbage collection(ゴミ掃除) 具体的には ...

2026-01-13

WSLのFedoraでSSHの設定をする

WSLはサーバー用途じゃないので、簡潔な方法でSSHの設定をします。 基本的に、レンタルサーバーにSSH接続できればOK。 過剰にセキュリティを気にしても仕方がない。 我はWSLぞ。 という気持ちで軽く。 SSHのカギを登録 まずは、レンタルサーバーでカギを発行するか、カギを登録してるのが前提。 そこの説明は省略。 ディレクトリ作成 mkdir ~/.ssh まあ、私のような初心者が使うのはエックスサーバーでしょう。 Windowsと共有せずに、WSL専用に新たにカギを発行した方がいいらしいよ。 SSHのカギを移動 mv /mnt/c/Users/xxxxx/Downloads/xserver.key ~/.ssh/ 所有者を確認 カギの所有者が自分じゃない場合は、変更。 ちなみに、私の場合は変更する必要なしだった。 chown $USER:$USER ~/.ssh/xserver.key パーミッションの設定 # .ssh ディレクトリ自体は「自分だけが見れる・入れる」 chmod 700 ~/.ssh # 秘密鍵(.key)は「自分だけが読める」 chmod 600 ~/.ssh/xserver.key 接続テスト ssh -p 10022 -i ~/.ssh/xserver.key xxxxx@xxxxx.xsrv.jp パスフレーズを設定していたら、パスフレーズを求められる。 接続できたら、configファイルを作成 ~/.ssh/configファイル Host xs HostName xxxxx.xsrv.jp User xxxxx Port 10022 IdentityFile ~/.ssh/xserver.key ssh xs これで接続できるようになる。 パスフレーズは求められる。 .bashrcの設定 以上でSSH接続はできるようにはなる。 だがしかし、 Neovimからrsyncしようとするとエラーになる。 ssh-agentが起動していない パスフレーズ入力へ対応していない よく分からないけど、Neovimからは接続できない。 このままじゃNeovim上から、サクッとrsyncでアップロードができない。 ...

2026-01-12

Windowsでrsyncが使えない

なんだよ、結局WSLを使う羽目になるのかよ。 せっかく、PowerShellのスクリプトも作ったのに。 全部無駄になっちまった。 すべては、Windows11でrsyncが使えないからだ。 サーバーへのFTPアップロードなんて、めんどくさい。 やってらんない。 だから、しゃーなしで、WSLのFedoraに移行した。 なぜ、Fedoraかって? Ubuntu嫌いなんですよ。 アプリのバージョンも古いから。 新しいバージョンのインストール方法を調べるのが面倒なんですよ。 WSLのインストールは面倒だけど、 正直、使い勝手はWindows11よりFedoraの方がいい。 PowerShellのコマンド、全然知らないんだよね。 今さら、覚える気もないし、調べるのも面倒。 まあ、ちょうどいい機会だから、WSLに環境を移すことにした。 開発環境じゃないですよ。 私は、プログラマーじゃないので。 ただ、日記を書く環境を整えているだけです。 1. Fedoraをインストール まずは、どんなディストリビューションがあるのかチェック。 wsl --list --online NAME FRIENDLY NAME Ubuntu Ubuntu Ubuntu-24.04 Ubuntu 24.04 LTS openSUSE-Tumbleweed openSUSE Tumbleweed openSUSE-Leap-16.0 openSUSE Leap 16.0 SUSE-Linux-Enterprise-15-SP7 SUSE Linux Enterprise 15 SP7 SUSE-Linux-Enterprise-16.0 SUSE Linux Enterprise 16.0 kali-linux Kali Linux Rolling Debian Debian GNU/Linux AlmaLinux-8 AlmaLinux OS 8 AlmaLinux-9 AlmaLinux OS 9 AlmaLinux-Kitten-10 AlmaLinux OS Kitten 10 AlmaLinux-10 AlmaLinux OS 10 archlinux Arch Linux FedoraLinux-43 Fedora Linux 43 FedoraLinux-42 Fedora Linux 42 eLxr-12 eLxr 12.12.0.0 GNU/Linux Ubuntu-20.04 Ubuntu 20.04 LTS Ubuntu-22.04 Ubuntu 22.04 LTS OracleLinux_7_9 Oracle Linux 7.9 OracleLinux_8_10 Oracle Linux 8.10 OracleLinux_9_5 Oracle Linux 9.5 openSUSE-Leap-15.6 openSUSE Leap 15.6 SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6 インストール wsl --install -d FedoraLinux-43 WSLはWindows11のコントロールパネルで設定しないと、動かないかもしれない。 動かない場合は、調べてね。 AIはあまり役に立たないかもしれないから、ネットの情報を漁るべし。 山ほど出てくるから大丈夫。 ...

2026-01-11

NeovimでMarkdownの見出しに番号をふる

Markdownで書いている時に、##で作成した見出し2に番号をふるのが面倒なので、関数を作って処理します。 手動で番号を付けていると、間に文章を差し込んだ時に番号がずれるのがストレス。だから、番号を付ける処理と消す処理をセットで作成して、keymapsにも登録。 これで、番号を付けたい時も付けたくない時も、らくらく処理できる。 lua/core/functions.lua local M = {} -- 1. 番号を振る関数 M.renumber_h2 = function() local bufnr = vim.api.nvim_get_current_buf() local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false) local count = 0 for i, line in ipairs(lines) do if line:match("^##%s") then count = count + 1 -- 既存の番号を削除してテキストを取得 local clean_text = line:gsub("^##%s+%d+%.%s*", "## "):gsub("^##%s+", "") lines[i] = string.format("## %d. %s", count, clean_text) end end vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, lines) print("Renumbered " .. count .. " headings.") end -- 2. 番号を消す関数 M.clear_h2 = function() local bufnr = vim.api.nvim_get_current_buf() local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false) for i, line in ipairs(lines) do if line:match("^##%s") then -- "## 1. テキスト" → "テキスト" を取得 local text = line:match("^##%s+%d+%.%s*(.*)$") if text then lines[i] = "## " .. text else -- 番号がない場合はそのまま(既にクリアされている) lines[i] = line end end end vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, lines) print("Cleared headings.") end return M lua/core/keymaps.lua local funcs = require("core.functions") vim.keymap.set('n', '<leader>hn', funcs.renumber_h2, { desc = "Markdown見出し番号付与" }) vim.keymap.set('n', '<leader>hc', funcs.clear_h2, { desc = "Markdown見出し番号削除" })

2026-01-11

Hugoで日付を除外した title を自動生成する方法

Hugo Archetypes で日付付きファイル名から title を生成する方法 このドキュメントは、Hugo の archetypes で YYYY-MM-DD-title.md 形式のファイル名から 日付を除外した title を自動生成する方法 と、Hugo が提供する case(文字変換)の種類をまとめたものです。 1. 前提 ファイル名の形式 content/posts/2026-01-09-regex-test.md 目的 frontmatter の date には日付を保持する title からは日付を除外する 表示用 title の case を制御する 2. 基本となる archetypes 設定 +++ date = '{{ .Date }}' draft = true title = '{{ $name := replaceRE `^[0-9]{4}-[0-9]{2}-[0-9]{2}-` `` .File.ContentBaseName }}{{ replace $name `-` ` ` | title }}' +++ 3. 正規表現の解説 使用している正規表現 ^[0-9]{4}-[0-9]{2}-[0-9]{2}- 意味 部分 説明 ^ 文字列の先頭 [0-9]{4} 年(4桁) - ハイフン [0-9]{2} 月 - ハイフン [0-9]{2} 日 - 日付直後の区切り 4. パイプ処理の流れ .File.ContentBaseName → replaceRE(日付を除外) → replace(ハイフンをスペースに) → case 変換 5. Hugo の case 変換一覧 title(Title Case) | title regex test → Regex Test 英語圏の見出しで一般的 技術記事・ドキュメント向き humanize | humanize regex-test → Regex test 先頭のみ大文字 日記・メモ向き lower | lower Regex Test → regex test 完全に小文字 私的メモ向き upper | upper regex test → REGEX TEST 強調・分類用途 変換なし {{ replace $name `-` ` ` }} regex test 入力に忠実 最も素朴 6. 設計思想メモ date はデータ title は表示 ファイル名は構造 表示はあとから何度でも変えられる この分離により、 ...

2026-01-11

PowerShell Functionを作成する方法

1. $PROFILE が存在するか確認 $PROFILE 例: C:\Users\ユーザー名\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 2. $PROFILE ファイルが存在するか確認 Test-Path $PROFILE True → すでにある False → まだない(作る必要あり) 3. $PROFILE が無ければ作成する New-Item -ItemType File -Path $PROFILE -Force 4. $PROFILE を編集する VS Code code $PROFILE メモ帳 notepad $PROFILE 5. function を書く(例:Hugo用) function hnew { param( [Parameter(Mandatory=$true)] [string]$title ) $today = Get-Date -Format "yyyy-MM-dd" hugo new "posts/$today-$title.md" } 6. 即反映したい場合 . $PROFILE 7. 動作確認 hnew test-post 生成例: ...

2026-01-11

How to Use Hugo (PaperMod)

Hugo のインストールから、PaperMod を使った運用・細かいハマりどころまでをまとめたメモ。 「一度やったけど忘れる」前提の、自分用 HowTo。 1. 前提 OS: macOS / Windows / Linux(コマンド差は最小限) 静的サイトジェネレータ: Hugo テーマ: PaperMod 設定ファイル: hugo.toml 2. Hugo のインストール macOS(Homebrew) brew install hugo Windows(Scoop) scoop install hugo-extended Fedora sudo dnf install hugo バージョン確認 hugo version 3. 新規サイト作成 hugo new site myblog cd myblog ディレクトリ構成(初期): myblog/ ├─ archetypes/ ├─ content/ ├─ layouts/ ├─ static/ └─ hugo.toml(または config.toml) 4. PaperMod テーマの導入 submodule で追加(推奨) git init git submodule add https://github.com/adityatelange/hugo-PaperMod themes/PaperMod hugo.toml にテーマ指定 theme = "PaperMod" 5. ローカルサーバー起動(draft 含む) hugo server -D -D = draft: true の記事も表示される アクセス: http://localhost:1313/ draft 記事とは +++ title = '下書き' draft = true +++ -D を付けないと表示されない。 ...

2026-01-11

ブログは日記が最強

中年にとって、なんだかんだ日記が最強。 ただし、お金は稼げない。 なぜ日記なのか 単純に忘れやすいから。 しかも、驚くほど忘れやすい。 直前に調べたことも、すぐに忘れてしまう。 どこで調べたかも忘れてしまう。 なんなら、何を調べていたかも忘れてしまう。 もう、記憶力なんて皆無なんですよ。 忘れてしまったことなんて、忘れたままでいい情報だ。 なんてこともない。 忘れたら、少し困ることもある。 そこで、日記の登場。 必要に迫られての日記だ。 だから、必要な時だけ書けばいい。 続けたければ続けたらいい。 やめたければやめたらいい。 かなり自由な状態。 現実では制約が多いのが中年。 自由に書けるって素晴らしい。 価値ある情報なんて、完全無視だ。 WordPressは過剰 ブログって言ったら、まず思い浮かべるのがWordPressでしょう。 ただ、おじさんの日記ごときに、WordPressは過剰。 そんなに動的に処理する必要なんてないんですよ。 書いたら書きっぱなし。 見返すのも自分だけ。 しかも、たまに。本当に、たまに。 こんなブログにWordPressを使ったら、 ただ単に、管理が面倒になるだけ。 セキュリティがどうだ、アップデートがどうだ。 プラグインに脆弱性があります。 うるせーーー。 取られて困る情報なんて、書いてないんだよ。 そもそも、おじさんは誰かに価値のある情報なんて持っていない。 でも、乗っ取られて踏み台にされるのは困る。 なら、最初からWordPressじゃなくていいよね。 だから、このブログは静的。 ラクなもんだよ、静的サイトってのは。 速いし。 CMSは移行が面倒 今まで、WordPressやDrupalなどのCMSでも日記を書いてきた。 その中で、感じた最大のデメリット。 それは、CMSは移行が面倒ってことだ。 レンタルサーバーを変える時に、データをバックアップして復元。 この復元で失敗したら、ものすごく面倒。 レンタルサーバーの仕様なんて知らない。 そもそも、ブログ程度でバックエンドの知識なんて必要ないだろう。 その知識を要求されても、時間がかかるだけなんですよー。 ただ、ブログを書くだけで、どうしてこんなに面倒なのか。 データベース、本当に必要? 個人のブログで? 金を稼ぐためじゃないのに? はい、不要ですね。 データベースなんて、いらんのですよ。 いらないものを管理するなんて、ストレスでしかない。 そんなことは、現実で十分やってるんだ。 私は、中年である。 ブログは、負荷が少ない方がいい。 CMSはラクに見えて、エラーが出ると時間泥棒である。 プラットフォーマーから距離をとる WordPressが面倒になって、noteやSNSで書いたこともある。 ただ、ブログ用途だとどちらも少し使いにくい。 noteは、書きやすいのは書きやすい。 ただ、コードを載せるとなると、ちょっと足りない。 もうちょっと、コードを見やすくしたいな。 おじさんは、ハイライトが欲しい。 見出しも2つだけじゃ、少し物足りない。 そして、noteに直接書くのも書きやすいんだが、 結局、バックアップどうする問題が出てくる。 そのまま、書き捨てておいてもいいんだけど、 たまに読み返したいのが日記の憎いところ。 ...

2026-01-10