【2025年新モデル】HDMIケーブル iPhone HDMI変換ケーブ ル 2m Digital AV変換アダプタLightning ライトニング 変換アダプター ミラーリング 電源不要 設定不要 携帯の画面をテ レビに映す 同画面テレビ接続 簡単接続 テレビに映す 音声同期出力 iPhone/iPad対応 映画/オフィス/ゲームに適用 iOS9.2 to iOS18に対応 [並行輸入品]
¥1,399 (2025年4月25日 13:08 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)USB Type C ケーブル 純正品質 【1M/2M 各2本】 タイプc ケーブル PD対応 60W急速充電 TPE材質 ABSシース ナイロン編み 断線防止 高耐久 480Mbps高速 データ転送 USB C 3.0 iPhone 16/15/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia Galaxy等USB-C各種対応
¥899 (2025年4月25日 13:05 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)PHILIPS EVNIA ゲーミングモニター (23.8インチ/180Hz/フルHD/Fast IPS/超高速0.5ms/HDR10/G-Sync Compatible対応/FPS向け/Adaptive Sync/5年保証/チルト/HDMI2.0×1、DisplayPort1.4×1 /1920x1080/フリッカーフリー/ブルーライト軽減/電源内蔵) 24M2N3200L/11
¥16,121 (2025年4月25日 13:08 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)
開発中、プログラム中の文字列をこまめに切り替えたい(トグルしたい)ことがあります。たとえば
の false
を true
にする、あるいはその逆を行うケースが考えられます。 特定のフラグや設定値を変えてビルドし直して、再度値を変えてビルドし直して…というステップは開発においてよくあることです。 特定の文字列を1手で切り替えたいとき、dial.nvim というプラグインが役に立ちます。
dial.nvim は Neovim の
/
を様々な用途に利用できるよう拡張するプラグインです。 ノーマルモードにおけるデフォルトの
/
は数値やアルファベットの増減のみ行いますが、 dial.nvim を入れると日付や真偽値 (true / false) の切り替えも行えるようになります。
キーマップの設定方法などの説明は README に譲りますが、たとえば上の例であれば
local augend = require("dial.augend")
require("dial.config").augends:register_group {
default = {
augend.constant.new {
elements = { "true", "false" },
},
},
}
という設定をいれることで true / false のトグルが可能となります。
さて、ここからが本題です。次のようなケースではどうでしょうか。
local completion_plugin = "cmp"
local os = "windows"
completion_plugin
は "cmp"
または "blink"
のいずれかであると分かっている、os
は "windows"
, "macos"
, "linux"
のいずれかであると分かっているようなケースです。
もちろん予め設定ファイルにてそれらの文字列を切り替えるようなルールを書いておくこともできますが、こういった specific な文字列をいちいち定義するのは手間です。バッファ上に記された switch: cmp, blink
のような形式のヒントを読み取り、cmp
と blink
を
/
で切り替えられるようにできないでしょうか。
dial.nvim でこれを直接的に(=簡潔な設定のみで)サポートする方法は現状ありませんが、ユーザ側で頑張って設定を書くことでやりたいことが実現できます。
local augend = require("dial.augend")
elements = {}
local function inline_constant_find(line, cursor)
local pattern = "switch: (.+)$"
local match = line:match(pattern)
if not match then
return
end
elements = {}
for option in match:gmatch "([^,]+)" do
table.insert(elements, option:match "^%s*(.-)%s*$")
end
local vim_regex_ptn = ([[V(%s)]]):format(table.concat(elements, [[|]]))
return require("dial.augend.common").find_pattern_regex(vim_regex_ptn, false)(line, cursor)
end
local function inline_constant_add(text, addend, cursor)
local n_patterns = #elements
local n = 1
for i, elem in ipairs(elements) do
if text == elem then
n = i
end
end
n = (n + addend - 1) % n_patterns + 1
text = elements[n]
cursor = #text
return { text = text, cursor = cursor }
end
require("dial.config").augends:register_group {
default = {
augend.user.new {
find = inline_constant_find,
add = inline_constant_add,
},
},
}
augend.user
はユーザ定義された関数を用いて増減ルールを指定できる機能であり、使いこなせば複雑な増減操作が可能となります。 上で書いた例では、カーソル行が switch: xxx,yyy,zzz
のような形式で終了している場合、 {"xxx", "yyy", "zzz"}
をトグル文字列の候補とします。 検索パターンを工夫すれば TypeScript や Python の型ヒントなど、別の記法にも対応できます。
文字列を動的にトグルするためには、トグル可能な文字列の候補を取得する必要があります。 現在はカーソル行から正規表現によるパターンマッチで取得しているため、異なるパターンで記述したり、改行を挟んだりするだけで使えなくなります。 「その文字列リテラルに入りうるパターン」を言語サーバから取得できる言語(TypeScript など)であれば 言語サーバからその情報を取得して用いるのが最も賢い方法ですが、まだ実現はできていません。
dial.nvim は作者自身も愛用しているものの、issue などで作者自身が思いもよらなかったユースケースに気付かされることが時折あります。 以前見かけた例としては、Tailwind CSS のクラス名を増減できるようにしている人がいました (bg-red-50
→ bg-red-100
→ bg-red-200
→ … のような感じ)。 作者の発想を超えたところで活躍しているのを見るとなんだか嬉しいものですね。
dial.nvim は工夫次第で色々なことができるので、ぜひいろいろ試してみてください。