diff --git a/Cargo.lock b/Cargo.lock index 8ef885471e8a311e7592cf2f076b6af9f083d804..02b27566e42f29eccd5b4a0ca145567e885cf36b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2591,9 +2591,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" @@ -4625,12 +4625,15 @@ dependencies = [ "client", "clock", "collections", + "ctor", "db", + "env_logger", "fs", "fsevent", "futures 0.3.25", "fuzzy", "git", + "glob", "gpui", "ignore", "language", diff --git a/Cargo.toml b/Cargo.toml index fd713d42421ec9d4349618edf5fb36f0cc6901ee..9f795992d5888d24ef083abe231ed1a4edd1a950 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,6 +71,7 @@ serde = { version = "1.0", features = ["derive", "rc"] } serde_derive = { version = "1.0", features = ["deserialize_in_place"] } serde_json = { version = "1.0", features = ["preserve_order", "raw_value"] } rand = { version = "0.8" } +postage = { version = "0.4.1", features = ["futures-traits"] } [patch.crates-io] tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "c51896d32dcc11a38e41f36e3deb1a6a9c4f4b14" } diff --git a/crates/call/Cargo.toml b/crates/call/Cargo.toml index 54546adb55d5c26e215a610c3d40a65361d3c1ad..4e738c06510e4a6662969f8d14c32cabef646138 100644 --- a/crates/call/Cargo.toml +++ b/crates/call/Cargo.toml @@ -34,7 +34,7 @@ util = { path = "../util" } anyhow = "1.0.38" async-broadcast = "0.4" futures = "0.3" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } [dev-dependencies] client = { path = "../client", features = ["test-support"] } diff --git a/crates/client/Cargo.toml b/crates/client/Cargo.toml index 6ff66b8ecc4d165cb5dddac2253f85825ea17279..cb6f29a42e5855d8d142c90fcadf5e5d5e5fe1c7 100644 --- a/crates/client/Cargo.toml +++ b/crates/client/Cargo.toml @@ -27,7 +27,7 @@ isahc = "1.7" lazy_static = "1.4.0" log = { version = "0.4.16", features = ["kv_unstable_serde"] } parking_lot = "0.11.1" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } rand = "0.8.3" smol = "1.2.5" thiserror = "1.0.29" diff --git a/crates/collab/src/tests/integration_tests.rs b/crates/collab/src/tests/integration_tests.rs index c04deca9e5bc07ff1f3b45c35812472499ff0977..82b542cb6b2d70a65a2151010fab85b056050336 100644 --- a/crates/collab/src/tests/integration_tests.rs +++ b/crates/collab/src/tests/integration_tests.rs @@ -1744,10 +1744,6 @@ async fn test_project_reconnect( vec![ "a.txt", "b.txt", - "subdir1", - "subdir1/c.txt", - "subdir1/d.txt", - "subdir1/e.txt", "subdir2", "subdir2/f.txt", "subdir2/g.txt", @@ -1780,10 +1776,6 @@ async fn test_project_reconnect( vec![ "a.txt", "b.txt", - "subdir1", - "subdir1/c.txt", - "subdir1/d.txt", - "subdir1/e.txt", "subdir2", "subdir2/f.txt", "subdir2/g.txt", @@ -1875,10 +1867,6 @@ async fn test_project_reconnect( vec![ "a.txt", "b.txt", - "subdir1", - "subdir1/c.txt", - "subdir1/d.txt", - "subdir1/e.txt", "subdir2", "subdir2/f.txt", "subdir2/g.txt", diff --git a/crates/collab_ui/Cargo.toml b/crates/collab_ui/Cargo.toml index 9b5ca9c1ea9b04995c518a7fd6334a6050de15e2..516a1b4fe4a2ebaa2b5405bbb8a2ca8490039039 100644 --- a/crates/collab_ui/Cargo.toml +++ b/crates/collab_ui/Cargo.toml @@ -42,7 +42,7 @@ workspace = { path = "../workspace" } anyhow = "1.0" futures = "0.3" log = "0.4" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } serde = { version = "1.0", features = ["derive", "rc"] } serde_derive = { version = "1.0", features = ["deserialize_in_place"] } diff --git a/crates/diagnostics/Cargo.toml b/crates/diagnostics/Cargo.toml index ebb57e0636ae1a6cb97ab6c7753accc553e00404..e28a378a679952bfacdd81cb54738f4c23e458ec 100644 --- a/crates/diagnostics/Cargo.toml +++ b/crates/diagnostics/Cargo.toml @@ -20,7 +20,7 @@ settings = { path = "../settings" } theme = { path = "../theme" } util = { path = "../util" } workspace = { path = "../workspace" } -postage = { version = "0.4", features = ["futures-traits"] } +postage = { workspace = true } [dev-dependencies] unindent = "0.1" diff --git a/crates/editor/Cargo.toml b/crates/editor/Cargo.toml index 6c52ec70e9355047be2a4eb2d30b04736b2edf80..44d0936808cedec50f64f545d3db007acbc30f3e 100644 --- a/crates/editor/Cargo.toml +++ b/crates/editor/Cargo.toml @@ -51,7 +51,7 @@ lazy_static = "1.4" log = { version = "0.4.16", features = ["kv_unstable_serde"] } ordered-float = "2.1.1" parking_lot = "0.11" -postage = { version = "0.4", features = ["futures-traits"] } +postage = { workspace = true } rand = { version = "0.8.3", optional = true } serde = { workspace = true } serde_derive = { version = "1.0", features = ["deserialize_in_place"] } diff --git a/crates/feedback/Cargo.toml b/crates/feedback/Cargo.toml index 51f070dd1d314278ddf5760ad4aa812ec8b7a85e..1c0d0e93ea4549d052286b4161362acacf540b78 100644 --- a/crates/feedback/Cargo.toml +++ b/crates/feedback/Cargo.toml @@ -21,7 +21,7 @@ gpui = { path = "../gpui" } human_bytes = "0.4.1" isahc = "1.7" lazy_static = "1.4.0" -postage = { version = "0.4", features = ["futures-traits"] } +postage = { workspace = true } project = { path = "../project" } search = { path = "../search" } serde = { version = "1.0", features = ["derive", "rc"] } diff --git a/crates/file_finder/Cargo.toml b/crates/file_finder/Cargo.toml index 1d1a4dfb1bc507095a3c09b2d7a1beb3748cb744..a1a3dbf71a3c8f8c5151b7729cb84bdac65b1f94 100644 --- a/crates/file_finder/Cargo.toml +++ b/crates/file_finder/Cargo.toml @@ -19,7 +19,7 @@ settings = { path = "../settings" } util = { path = "../util" } theme = { path = "../theme" } workspace = { path = "../workspace" } -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } [dev-dependencies] gpui = { path = "../gpui", features = ["test-support"] } diff --git a/crates/fs/src/fs.rs b/crates/fs/src/fs.rs index f640f35036d3ff3a26566f2058e22cf64d7efa27..fd713ef3b552be734d5ea3813e647a235f7cdd9b 100644 --- a/crates/fs/src/fs.rs +++ b/crates/fs/src/fs.rs @@ -380,6 +380,8 @@ struct FakeFsState { next_inode: u64, next_mtime: SystemTime, event_txs: Vec>>, + events_paused: bool, + buffered_events: Vec, } #[cfg(any(test, feature = "test-support"))] @@ -483,15 +485,21 @@ impl FakeFsState { I: IntoIterator, T: Into, { - let events = paths - .into_iter() - .map(|path| fsevent::Event { + self.buffered_events + .extend(paths.into_iter().map(|path| fsevent::Event { event_id: 0, flags: fsevent::StreamFlags::empty(), path: path.into(), - }) - .collect::>(); + })); + + if !self.events_paused { + self.flush_events(self.buffered_events.len()); + } + } + fn flush_events(&mut self, mut count: usize) { + count = count.min(self.buffered_events.len()); + let events = self.buffered_events.drain(0..count).collect::>(); self.event_txs.retain(|tx| { let _ = tx.try_send(events.clone()); !tx.is_closed() @@ -514,6 +522,8 @@ impl FakeFs { next_mtime: SystemTime::UNIX_EPOCH, next_inode: 1, event_txs: Default::default(), + buffered_events: Vec::new(), + events_paused: false, }), }) } @@ -567,6 +577,18 @@ impl FakeFs { state.emit_event(&[path]); } + pub async fn pause_events(&self) { + self.state.lock().await.events_paused = true; + } + + pub async fn buffered_event_count(&self) -> usize { + self.state.lock().await.buffered_events.len() + } + + pub async fn flush_events(&self, count: usize) { + self.state.lock().await.flush_events(count); + } + #[must_use] pub fn insert_tree<'a>( &'a self, @@ -868,7 +890,7 @@ impl Fs for FakeFs { .ok_or_else(|| anyhow!("cannot remove the root"))?; let base_name = path.file_name().unwrap(); - let state = self.state.lock().await; + let mut state = self.state.lock().await; let parent_entry = state.read_path(parent_path).await?; let mut parent_entry = parent_entry.lock().await; let entry = parent_entry @@ -892,7 +914,7 @@ impl Fs for FakeFs { e.remove(); } } - + state.emit_event(&[path]); Ok(()) } diff --git a/crates/go_to_line/Cargo.toml b/crates/go_to_line/Cargo.toml index def6361dc2a83dc57c5a199c3c70ff93d059686f..54567b24406c27f094bcc1e235a5e9817694ea97 100644 --- a/crates/go_to_line/Cargo.toml +++ b/crates/go_to_line/Cargo.toml @@ -15,4 +15,4 @@ menu = { path = "../menu" } settings = { path = "../settings" } text = { path = "../text" } workspace = { path = "../workspace" } -postage = { version = "0.4", features = ["futures-traits"] } +postage = { workspace = true } diff --git a/crates/gpui/Cargo.toml b/crates/gpui/Cargo.toml index 65d36753e7bc1e80c4f6bb5ac6a6ff555c326b8e..bd994b5407ba6a3d5af787e50df9c77ebd432b2b 100644 --- a/crates/gpui/Cargo.toml +++ b/crates/gpui/Cargo.toml @@ -36,7 +36,7 @@ parking = "2.0.0" parking_lot = "0.11.1" pathfinder_color = "0.5" pathfinder_geometry = "0.5" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } rand = "0.8.3" resvg = "0.14" schemars = "0.8" diff --git a/crates/language/Cargo.toml b/crates/language/Cargo.toml index 26e2d8c53baef5ee1c503cac88e426b1c0f0442c..ac4badbe2a35db850793ed569876d6c5070ba433 100644 --- a/crates/language/Cargo.toml +++ b/crates/language/Cargo.toml @@ -43,7 +43,7 @@ futures = "0.3" lazy_static = "1.4" log = { version = "0.4.16", features = ["kv_unstable_serde"] } parking_lot = "0.11.1" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } rand = { version = "0.8.3", optional = true } regex = "1.5" serde = { version = "1.0", features = ["derive", "rc"] } diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index 09a96342271b00f508094b8426ab5ddf81b04131..de1fc009ad3ed1ba6ce4983b0a7dc9188aab6e1e 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -1366,6 +1366,7 @@ impl Buffer { where T: Into>, { + self.autoindent_requests.clear(); self.edit([(0..self.len(), text)], None, cx) } diff --git a/crates/language/src/buffer_tests.rs b/crates/language/src/buffer_tests.rs index 3e65ec3120445bb69604c056b200d4b8f66b6863..765c0f96738d92194ee181ca67b3e44eb6339e2e 100644 --- a/crates/language/src/buffer_tests.rs +++ b/crates/language/src/buffer_tests.rs @@ -809,7 +809,6 @@ fn test_enclosing_bracket_ranges_where_brackets_are_not_outermost_children( }"}], ); - eprintln!("-----------------------"); // Regression test: even though the parent node of the parentheses (the for loop) does // intersect the given range, the parentheses themselves do not contain the range, so // they should not be returned. Only the curly braces contain the range. diff --git a/crates/live_kit_client/Cargo.toml b/crates/live_kit_client/Cargo.toml index 55645732b8f104f327624fc0834657ad940bdb20..71a6235b95e28d1a1178d9a5c6253b7d190fbf79 100644 --- a/crates/live_kit_client/Cargo.toml +++ b/crates/live_kit_client/Cargo.toml @@ -35,7 +35,7 @@ core-graphics = "0.22.3" futures = "0.3" log = { version = "0.4.16", features = ["kv_unstable_serde"] } parking_lot = "0.11.1" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } async-trait = { version = "0.1", optional = true } lazy_static = { version = "1.4", optional = true } diff --git a/crates/lsp/Cargo.toml b/crates/lsp/Cargo.toml index f37b1c9a4536ebb95a8a10c7053adebb09dad2e4..aa1f49977c9f7761ecd713e8258bde7c0eaa8b1c 100644 --- a/crates/lsp/Cargo.toml +++ b/crates/lsp/Cargo.toml @@ -21,7 +21,7 @@ futures = "0.3" log = { version = "0.4.16", features = ["kv_unstable_serde"] } lsp-types = "0.91" parking_lot = "0.11" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } serde = { version = "1.0", features = ["derive", "rc"] } serde_derive = { version = "1.0", features = ["deserialize_in_place"] } serde_json = { version = "1.0", features = ["raw_value"] } diff --git a/crates/lsp/src/lsp.rs b/crates/lsp/src/lsp.rs index 81568b9e3e449b4a922d6c7e64dfe0df309fbb6c..ad94423e11ad3db1136c2ee1c07b3766690ebd8b 100644 --- a/crates/lsp/src/lsp.rs +++ b/crates/lsp/src/lsp.rs @@ -319,6 +319,9 @@ impl LanguageServer { capabilities: ClientCapabilities { workspace: Some(WorkspaceClientCapabilities { configuration: Some(true), + did_change_watched_files: Some(DynamicRegistrationClientCapabilities { + dynamic_registration: Some(true), + }), did_change_configuration: Some(DynamicRegistrationClientCapabilities { dynamic_registration: Some(true), }), diff --git a/crates/outline/Cargo.toml b/crates/outline/Cargo.toml index 661c84c8cdc8126aac2fdfc160a3f021367b9e86..552cf548928c34f38043dc910e0e621f702ca11d 100644 --- a/crates/outline/Cargo.toml +++ b/crates/outline/Cargo.toml @@ -18,5 +18,5 @@ settings = { path = "../settings" } text = { path = "../text" } workspace = { path = "../workspace" } ordered-float = "2.1.1" -postage = { version = "0.4", features = ["futures-traits"] } +postage = { workspace = true } smol = "1.2" diff --git a/crates/project/Cargo.toml b/crates/project/Cargo.toml index 89ed5563abef6d9cccf605e2efded09cdaf9250e..b42a6fc674d230adeed763a4de8f10310d0b19e8 100644 --- a/crates/project/Cargo.toml +++ b/crates/project/Cargo.toml @@ -27,6 +27,7 @@ fs = { path = "../fs" } fsevent = { path = "../fsevent" } fuzzy = { path = "../fuzzy" } git = { path = "../git" } +glob = { version = "0.3.1" } gpui = { path = "../gpui" } language = { path = "../language" } lsp = { path = "../lsp" } @@ -44,7 +45,7 @@ ignore = "0.4" lazy_static = "1.4.0" log = { version = "0.4.16", features = ["kv_unstable_serde"] } parking_lot = "0.11.1" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } pulldown-cmark = { version = "0.9.1", default-features = false } rand = "0.8.3" regex = "1.5" @@ -58,6 +59,8 @@ thiserror = "1.0.29" toml = "0.5" [dev-dependencies] +ctor = "0.1" +env_logger = "0.9" pretty_assertions = "1.3.0" client = { path = "../client", features = ["test-support"] } collections = { path = "../collections", features = ["test-support"] } diff --git a/crates/project/src/lsp_glob_set.rs b/crates/project/src/lsp_glob_set.rs new file mode 100644 index 0000000000000000000000000000000000000000..daac344a0a8fb4396da802ddc6f7325ffd47ea9f --- /dev/null +++ b/crates/project/src/lsp_glob_set.rs @@ -0,0 +1,121 @@ +use anyhow::{anyhow, Result}; +use std::path::Path; + +#[derive(Default)] +pub struct LspGlobSet { + patterns: Vec, +} + +impl LspGlobSet { + pub fn clear(&mut self) { + self.patterns.clear(); + } + + /// Add a pattern to the glob set. + /// + /// LSP's glob syntax supports bash-style brace expansion. For example, + /// the pattern '*.{js,ts}' would match all JavaScript or TypeScript files. + /// This is not a part of the standard libc glob syntax, and isn't supported + /// by the `glob` crate. So we pre-process the glob patterns, producing a + /// separate glob `Pattern` object for each part of a brace expansion. + pub fn add_pattern(&mut self, pattern: &str) -> Result<()> { + // Find all of the ranges of `pattern` that contain matched curly braces. + let mut expansion_ranges = Vec::new(); + let mut expansion_start_ix = None; + for (ix, c) in pattern.match_indices(|c| ['{', '}'].contains(&c)) { + match c { + "{" => { + if expansion_start_ix.is_some() { + return Err(anyhow!("nested braces in glob patterns aren't supported")); + } + expansion_start_ix = Some(ix); + } + "}" => { + if let Some(start_ix) = expansion_start_ix { + expansion_ranges.push(start_ix..ix + 1); + } + expansion_start_ix = None; + } + _ => {} + } + } + + // Starting with a single pattern, process each brace expansion by cloning + // the pattern once per element of the expansion. + let mut unexpanded_patterns = vec![]; + let mut expanded_patterns = vec![pattern.to_string()]; + + for outer_range in expansion_ranges.into_iter().rev() { + let inner_range = (outer_range.start + 1)..(outer_range.end - 1); + std::mem::swap(&mut unexpanded_patterns, &mut expanded_patterns); + for unexpanded_pattern in unexpanded_patterns.drain(..) { + for part in unexpanded_pattern[inner_range.clone()].split(',') { + let mut expanded_pattern = unexpanded_pattern.clone(); + expanded_pattern.replace_range(outer_range.clone(), part); + expanded_patterns.push(expanded_pattern); + } + } + } + + // Parse the final glob patterns and add them to the set. + for pattern in expanded_patterns { + let pattern = glob::Pattern::new(&pattern)?; + self.patterns.push(pattern); + } + + Ok(()) + } + + pub fn matches(&self, path: &Path) -> bool { + self.patterns + .iter() + .any(|pattern| pattern.matches_path(path)) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_glob_set() { + let mut watch = LspGlobSet::default(); + watch.add_pattern("/a/**/*.rs").unwrap(); + watch.add_pattern("/a/**/Cargo.toml").unwrap(); + + assert!(watch.matches("/a/b.rs".as_ref())); + assert!(watch.matches("/a/b/c.rs".as_ref())); + + assert!(!watch.matches("/b/c.rs".as_ref())); + assert!(!watch.matches("/a/b.ts".as_ref())); + } + + #[test] + fn test_brace_expansion() { + let mut watch = LspGlobSet::default(); + watch.add_pattern("/a/*.{ts,js,tsx}").unwrap(); + + assert!(watch.matches("/a/one.js".as_ref())); + assert!(watch.matches("/a/two.ts".as_ref())); + assert!(watch.matches("/a/three.tsx".as_ref())); + + assert!(!watch.matches("/a/one.j".as_ref())); + assert!(!watch.matches("/a/two.s".as_ref())); + assert!(!watch.matches("/a/three.t".as_ref())); + assert!(!watch.matches("/a/four.t".as_ref())); + assert!(!watch.matches("/a/five.xt".as_ref())); + } + + #[test] + fn test_multiple_brace_expansion() { + let mut watch = LspGlobSet::default(); + watch.add_pattern("/a/{one,two,three}.{b*c,d*e}").unwrap(); + + assert!(watch.matches("/a/one.bic".as_ref())); + assert!(watch.matches("/a/two.dole".as_ref())); + assert!(watch.matches("/a/three.deeee".as_ref())); + + assert!(!watch.matches("/a/four.bic".as_ref())); + assert!(!watch.matches("/a/one.be".as_ref())); + } +} diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 5b2fd412e8a272651c54722adc518a791c6cafc5..fedfa0c863f299ccc00be3a55ca664c7f8342877 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -1,5 +1,6 @@ mod ignore; mod lsp_command; +mod lsp_glob_set; pub mod search; pub mod terminals; pub mod worktree; @@ -33,10 +34,11 @@ use language::{ Transaction, Unclipped, }; use lsp::{ - DiagnosticSeverity, DiagnosticTag, DocumentHighlightKind, LanguageServer, LanguageString, - MarkedString, + DiagnosticSeverity, DiagnosticTag, DidChangeWatchedFilesRegistrationOptions, + DocumentHighlightKind, LanguageServer, LanguageString, MarkedString, }; use lsp_command::*; +use lsp_glob_set::LspGlobSet; use postage::watch; use rand::prelude::*; use search::SearchQuery; @@ -188,6 +190,7 @@ pub enum LanguageServerState { language: Arc, adapter: Arc, server: Arc, + watched_paths: LspGlobSet, simulate_disk_based_diagnostics_completion: Option>, }, } @@ -2046,8 +2049,26 @@ impl Project { }) .detach(); language_server - .on_request::(|_, _| async { - Ok(()) + .on_request::({ + let this = this.downgrade(); + move |params, mut cx| async move { + let this = this + .upgrade(&cx) + .ok_or_else(|| anyhow!("project dropped"))?; + for reg in params.registrations { + if reg.method == "workspace/didChangeWatchedFiles" { + if let Some(options) = reg.register_options { + let options = serde_json::from_value(options)?; + this.update(&mut cx, |this, cx| { + this.on_lsp_did_change_watched_files( + server_id, options, cx, + ); + }); + } + } + } + Ok(()) + } }) .detach(); @@ -2117,6 +2138,7 @@ impl Project { LanguageServerState::Running { adapter: adapter.clone(), language, + watched_paths: Default::default(), server: language_server.clone(), simulate_disk_based_diagnostics_completion: None, }, @@ -2509,6 +2531,23 @@ impl Project { } } + fn on_lsp_did_change_watched_files( + &mut self, + language_server_id: usize, + params: DidChangeWatchedFilesRegistrationOptions, + cx: &mut ModelContext, + ) { + if let Some(LanguageServerState::Running { watched_paths, .. }) = + self.language_servers.get_mut(&language_server_id) + { + watched_paths.clear(); + for watcher in params.watchers { + watched_paths.add_pattern(&watcher.glob_pattern).log_err(); + } + cx.notify(); + } + } + async fn on_lsp_workspace_edit( this: WeakModelHandle, params: lsp::ApplyWorkspaceEditParams, @@ -4465,7 +4504,10 @@ impl Project { cx.observe(worktree, |_, _, cx| cx.notify()).detach(); if worktree.read(cx).is_local() { cx.subscribe(worktree, |this, worktree, event, cx| match event { - worktree::Event::UpdatedEntries => this.update_local_worktree_buffers(worktree, cx), + worktree::Event::UpdatedEntries(changes) => { + this.update_local_worktree_buffers(&worktree, cx); + this.update_local_worktree_language_servers(&worktree, changes, cx); + } worktree::Event::UpdatedGitRepositories(updated_repos) => { this.update_local_worktree_buffers_git_repos(worktree, updated_repos, cx) } @@ -4496,7 +4538,7 @@ impl Project { fn update_local_worktree_buffers( &mut self, - worktree_handle: ModelHandle, + worktree_handle: &ModelHandle, cx: &mut ModelContext, ) { let snapshot = worktree_handle.read(cx).snapshot(); @@ -4506,7 +4548,7 @@ impl Project { if let Some(buffer) = buffer.upgrade(cx) { buffer.update(cx, |buffer, cx| { if let Some(old_file) = File::from_dyn(buffer.file()) { - if old_file.worktree != worktree_handle { + if old_file.worktree != *worktree_handle { return; } @@ -4578,6 +4620,58 @@ impl Project { } } + fn update_local_worktree_language_servers( + &mut self, + worktree_handle: &ModelHandle, + changes: &HashMap, PathChange>, + cx: &mut ModelContext, + ) { + let worktree_id = worktree_handle.read(cx).id(); + let abs_path = worktree_handle.read(cx).abs_path(); + for ((server_worktree_id, _), server_id) in &self.language_server_ids { + if *server_worktree_id == worktree_id { + if let Some(server) = self.language_servers.get(server_id) { + if let LanguageServerState::Running { + server, + watched_paths, + .. + } = server + { + let params = lsp::DidChangeWatchedFilesParams { + changes: changes + .iter() + .filter_map(|(path, change)| { + let path = abs_path.join(path); + if watched_paths.matches(&path) { + Some(lsp::FileEvent { + uri: lsp::Url::from_file_path(path).unwrap(), + typ: match change { + PathChange::Added => lsp::FileChangeType::CREATED, + PathChange::Removed => lsp::FileChangeType::DELETED, + PathChange::Updated + | PathChange::AddedOrUpdated => { + lsp::FileChangeType::CHANGED + } + }, + }) + } else { + None + } + }) + .collect(), + }; + + if !params.changes.is_empty() { + server + .notify::(params) + .log_err(); + } + } + } + } + } + } + fn update_local_worktree_buffers_git_repos( &mut self, worktree: ModelHandle, diff --git a/crates/project/src/project_tests.rs b/crates/project/src/project_tests.rs index ddcfed9dac548f3c03c14e61f23c9d0c9e474964..023ce3c5bc4af7ec83e527311c337f52f3efef67 100644 --- a/crates/project/src/project_tests.rs +++ b/crates/project/src/project_tests.rs @@ -8,12 +8,21 @@ use language::{ OffsetRangeExt, Point, ToPoint, }; use lsp::Url; +use parking_lot::Mutex; use pretty_assertions::assert_eq; use serde_json::json; use std::{cell::RefCell, os::unix, rc::Rc, task::Poll}; use unindent::Unindent as _; use util::{assert_set_eq, test::temp_tree}; +#[cfg(test)] +#[ctor::ctor] +fn init_logger() { + if std::env::var("RUST_LOG").is_ok() { + env_logger::init(); + } +} + #[gpui::test] async fn test_symlinks(cx: &mut gpui::TestAppContext) { let dir = temp_tree(json!({ @@ -438,6 +447,111 @@ async fn test_managing_language_servers( ); } +#[gpui::test] +async fn test_reporting_fs_changes_to_language_servers(cx: &mut gpui::TestAppContext) { + cx.foreground().forbid_parking(); + + let mut language = Language::new( + LanguageConfig { + name: "Rust".into(), + path_suffixes: vec!["rs".to_string()], + ..Default::default() + }, + Some(tree_sitter_rust::language()), + ); + let mut fake_servers = language + .set_fake_lsp_adapter(Arc::new(FakeLspAdapter { + name: "the-language-server", + ..Default::default() + })) + .await; + + let fs = FakeFs::new(cx.background()); + fs.insert_tree( + "/the-root", + json!({ + "a.rs": "", + "b.rs": "", + }), + ) + .await; + + let project = Project::test(fs.clone(), ["/the-root".as_ref()], cx).await; + project.update(cx, |project, _| { + project.languages.add(Arc::new(language)); + }); + cx.foreground().run_until_parked(); + + // Start the language server by opening a buffer with a compatible file extension. + let _buffer = project + .update(cx, |project, cx| { + project.open_local_buffer("/the-root/a.rs", cx) + }) + .await + .unwrap(); + + // Keep track of the FS events reported to the language server. + let fake_server = fake_servers.next().await.unwrap(); + let file_changes = Arc::new(Mutex::new(Vec::new())); + fake_server + .request::(lsp::RegistrationParams { + registrations: vec![lsp::Registration { + id: Default::default(), + method: "workspace/didChangeWatchedFiles".to_string(), + register_options: serde_json::to_value( + lsp::DidChangeWatchedFilesRegistrationOptions { + watchers: vec![lsp::FileSystemWatcher { + glob_pattern: "*.{rs,c}".to_string(), + kind: None, + }], + }, + ) + .ok(), + }], + }) + .await + .unwrap(); + fake_server.handle_notification::({ + let file_changes = file_changes.clone(); + move |params, _| { + let mut file_changes = file_changes.lock(); + file_changes.extend(params.changes); + file_changes.sort_by(|a, b| a.uri.cmp(&b.uri)); + } + }); + + cx.foreground().run_until_parked(); + assert_eq!(file_changes.lock().len(), 0); + + // Perform some file system mutations, two of which match the watched patterns, + // and one of which does not. + fs.create_file("/the-root/c.rs".as_ref(), Default::default()) + .await + .unwrap(); + fs.create_file("/the-root/d.txt".as_ref(), Default::default()) + .await + .unwrap(); + fs.remove_file("/the-root/b.rs".as_ref(), Default::default()) + .await + .unwrap(); + + // The language server receives events for the FS mutations that match its watch patterns. + cx.foreground().run_until_parked(); + assert_eq!( + &*file_changes.lock(), + &[ + lsp::FileEvent { + uri: lsp::Url::from_file_path("/the-root/b.rs").unwrap(), + typ: lsp::FileChangeType::DELETED, + }, + lsp::FileEvent { + uri: lsp::Url::from_file_path("/the-root/c.rs").unwrap(), + typ: lsp::FileChangeType::CREATED, + }, + ] + ); +} + #[gpui::test] async fn test_single_file_worktrees_diagnostics(cx: &mut gpui::TestAppContext) { cx.foreground().forbid_parking(); @@ -1585,7 +1699,7 @@ async fn test_edits_from_lsp_with_edits_on_adjacent_lines(cx: &mut gpui::TestApp buffer.text(), " use a::{b, c}; - + fn f() { b(); c(); @@ -1603,7 +1717,7 @@ async fn test_invalid_edits_from_lsp(cx: &mut gpui::TestAppContext) { let text = " use a::b; use a::c; - + fn f() { b(); c(); @@ -1688,7 +1802,7 @@ async fn test_invalid_edits_from_lsp(cx: &mut gpui::TestAppContext) { buffer.text(), " use a::{b, c}; - + fn f() { b(); c(); diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index 59a98bdcfa9915046b964b19c398024d08ab7643..1d40dad86480a8180c85fac262f9050c04e07c91 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -1,18 +1,18 @@ -use super::{ignore::IgnoreStack, DiagnosticSummary}; -use crate::{copy_recursive, ProjectEntryId, RemoveOptions}; +use crate::{ + copy_recursive, ignore::IgnoreStack, DiagnosticSummary, ProjectEntryId, RemoveOptions, +}; use ::ignore::gitignore::{Gitignore, GitignoreBuilder}; use anyhow::{anyhow, Context, Result}; use client::{proto, Client}; use clock::ReplicaId; use collections::{HashMap, VecDeque}; -use fs::LineEnding; -use fs::{repository::GitRepository, Fs}; +use fs::{repository::GitRepository, Fs, LineEnding}; use futures::{ channel::{ mpsc::{self, UnboundedSender}, oneshot, }, - Stream, StreamExt, + select_biased, Stream, StreamExt, }; use fuzzy::CharBag; use git::{DOT_GIT, GITIGNORE}; @@ -20,20 +20,19 @@ use gpui::{ executor, AppContext, AsyncAppContext, Entity, ModelContext, ModelHandle, MutableAppContext, Task, }; -use language::File as _; use language::{ proto::{ deserialize_fingerprint, deserialize_version, serialize_fingerprint, serialize_line_ending, serialize_version, }, - Buffer, DiagnosticEntry, PointUtf16, Rope, RopeFingerprint, Unclipped, + Buffer, DiagnosticEntry, File as _, PointUtf16, Rope, RopeFingerprint, Unclipped, }; use parking_lot::Mutex; use postage::{ + barrier, prelude::{Sink as _, Stream as _}, watch, }; - use smol::channel::{self, Sender}; use std::{ any::Any, @@ -45,18 +44,19 @@ use std::{ mem, ops::{Deref, DerefMut}, path::{Path, PathBuf}, - sync::{atomic::AtomicUsize, Arc}, + sync::{ + atomic::{AtomicUsize, Ordering::SeqCst}, + Arc, + }, task::Poll, time::{Duration, SystemTime}, }; use sum_tree::{Bias, Edit, SeekTarget, SumTree, TreeMap, TreeSet}; -use util::paths::HOME; -use util::{ResultExt, TryFutureExt}; +use util::{paths::HOME, ResultExt, TryFutureExt}; #[derive(Copy, Clone, PartialEq, Eq, Debug, Hash, PartialOrd, Ord)] pub struct WorktreeId(usize); -#[allow(clippy::large_enum_variant)] pub enum Worktree { Local(LocalWorktree), Remote(RemoteWorktree), @@ -64,10 +64,9 @@ pub enum Worktree { pub struct LocalWorktree { snapshot: LocalSnapshot, - background_snapshot: Arc>, - last_scan_state_rx: watch::Receiver, - _background_scanner_task: Option>, - poll_task: Option>, + path_changes_tx: channel::Sender<(Vec, barrier::Sender)>, + is_scanning: (watch::Sender, watch::Receiver), + _background_scanner_task: Task<()>, share: Option, diagnostics: HashMap, Vec>>>, diagnostic_summaries: TreeMap, @@ -77,8 +76,8 @@ pub struct LocalWorktree { } pub struct RemoteWorktree { - pub snapshot: Snapshot, - pub(crate) background_snapshot: Arc>, + snapshot: Snapshot, + background_snapshot: Arc>, project_id: u64, client: Arc, updates_tx: Option>, @@ -118,11 +117,11 @@ impl std::fmt::Debug for GitRepositoryEntry { f.debug_struct("GitRepositoryEntry") .field("content_path", &self.content_path) .field("git_dir_path", &self.git_dir_path) - .field("libgit_repository", &"LibGitRepository") .finish() } } +#[derive(Debug)] pub struct LocalSnapshot { ignores_by_parent_abs_path: HashMap, (Arc, usize)>, git_repositories: Vec, @@ -157,14 +156,22 @@ impl DerefMut for LocalSnapshot { } } -#[derive(Clone, Debug)] enum ScanState { - Idle, /// The worktree is performing its initial scan of the filesystem. - Initializing, + Initializing { + snapshot: LocalSnapshot, + barrier: Option, + }, + Initialized { + snapshot: LocalSnapshot, + }, /// The worktree is updating in response to filesystem events. Updating, - Err(Arc), + Updated { + snapshot: LocalSnapshot, + changes: HashMap, PathChange>, + barrier: Option, + }, } struct ShareState { @@ -175,7 +182,7 @@ struct ShareState { } pub enum Event { - UpdatedEntries, + UpdatedEntries(HashMap, PathChange>), UpdatedGitRepositories(Vec), } @@ -192,21 +199,87 @@ impl Worktree { next_entry_id: Arc, cx: &mut AsyncAppContext, ) -> Result> { - let (tree, scan_states_tx) = - LocalWorktree::create(client, path, visible, fs.clone(), next_entry_id, cx).await?; - tree.update(cx, |tree, cx| { - let tree = tree.as_local_mut().unwrap(); - let abs_path = tree.abs_path().clone(); - let background_snapshot = tree.background_snapshot.clone(); - let background = cx.background().clone(); - tree._background_scanner_task = Some(cx.background().spawn(async move { - let events = fs.watch(&abs_path, Duration::from_millis(100)).await; - let scanner = - BackgroundScanner::new(background_snapshot, scan_states_tx, fs, background); - scanner.run(events).await; - })); - }); - Ok(tree) + // After determining whether the root entry is a file or a directory, populate the + // snapshot's "root name", which will be used for the purpose of fuzzy matching. + let abs_path = path.into(); + let metadata = fs + .metadata(&abs_path) + .await + .context("failed to stat worktree path")?; + + Ok(cx.add_model(move |cx: &mut ModelContext| { + let root_name = abs_path + .file_name() + .map_or(String::new(), |f| f.to_string_lossy().to_string()); + + let mut snapshot = LocalSnapshot { + ignores_by_parent_abs_path: Default::default(), + git_repositories: Default::default(), + removed_entry_ids: Default::default(), + next_entry_id, + snapshot: Snapshot { + id: WorktreeId::from_usize(cx.model_id()), + abs_path: abs_path.clone(), + root_name: root_name.clone(), + root_char_bag: root_name.chars().map(|c| c.to_ascii_lowercase()).collect(), + entries_by_path: Default::default(), + entries_by_id: Default::default(), + scan_id: 0, + completed_scan_id: 0, + }, + }; + + if let Some(metadata) = metadata { + snapshot.insert_entry( + Entry::new( + Arc::from(Path::new("")), + &metadata, + &snapshot.next_entry_id, + snapshot.root_char_bag, + ), + fs.as_ref(), + ); + } + + let (path_changes_tx, path_changes_rx) = channel::unbounded(); + let (scan_states_tx, mut scan_states_rx) = mpsc::unbounded(); + + cx.spawn_weak(|this, mut cx| async move { + while let Some((state, this)) = scan_states_rx.next().await.zip(this.upgrade(&cx)) { + this.update(&mut cx, |this, cx| { + this.as_local_mut() + .unwrap() + .background_scanner_updated(state, cx); + }); + } + }) + .detach(); + + let background_scanner_task = cx.background().spawn({ + let fs = fs.clone(); + let snapshot = snapshot.clone(); + let background = cx.background().clone(); + async move { + let events = fs.watch(&abs_path, Duration::from_millis(100)).await; + BackgroundScanner::new(snapshot, scan_states_tx, fs, background) + .run(events, path_changes_rx) + .await; + } + }); + + Worktree::Local(LocalWorktree { + snapshot, + is_scanning: watch::channel_with(true), + share: None, + path_changes_tx, + _background_scanner_task: background_scanner_task, + diagnostics: Default::default(), + diagnostic_summaries: Default::default(), + client, + fs, + visible, + }) + })) } pub fn remote( @@ -216,64 +289,50 @@ impl Worktree { client: Arc, cx: &mut MutableAppContext, ) -> ModelHandle { - let remote_id = worktree.id; - let root_char_bag: CharBag = worktree - .root_name - .chars() - .map(|c| c.to_ascii_lowercase()) - .collect(); - let root_name = worktree.root_name.clone(); - let visible = worktree.visible; - - let abs_path = PathBuf::from(worktree.abs_path); - let snapshot = Snapshot { - id: WorktreeId(remote_id as usize), - abs_path: Arc::from(abs_path.deref()), - root_name, - root_char_bag, - entries_by_path: Default::default(), - entries_by_id: Default::default(), - scan_id: 0, - completed_scan_id: 0, - }; - - let (updates_tx, mut updates_rx) = mpsc::unbounded(); - let background_snapshot = Arc::new(Mutex::new(snapshot.clone())); - let (mut snapshot_updated_tx, mut snapshot_updated_rx) = watch::channel(); - let worktree_handle = cx.add_model(|_: &mut ModelContext| { - Worktree::Remote(RemoteWorktree { - project_id: project_remote_id, - replica_id, - snapshot: snapshot.clone(), - background_snapshot: background_snapshot.clone(), - updates_tx: Some(updates_tx), - snapshot_subscriptions: Default::default(), - client: client.clone(), - diagnostic_summaries: Default::default(), - visible, - disconnected: false, - }) - }); + cx.add_model(|cx: &mut ModelContext| { + let snapshot = Snapshot { + id: WorktreeId(worktree.id as usize), + abs_path: Arc::from(PathBuf::from(worktree.abs_path)), + root_name: worktree.root_name.clone(), + root_char_bag: worktree + .root_name + .chars() + .map(|c| c.to_ascii_lowercase()) + .collect(), + entries_by_path: Default::default(), + entries_by_id: Default::default(), + scan_id: 0, + completed_scan_id: 0, + }; - cx.background() - .spawn(async move { - while let Some(update) = updates_rx.next().await { - if let Err(error) = background_snapshot.lock().apply_remote_update(update) { - log::error!("error applying worktree update: {}", error); + let (updates_tx, mut updates_rx) = mpsc::unbounded(); + let background_snapshot = Arc::new(Mutex::new(snapshot.clone())); + let (mut snapshot_updated_tx, mut snapshot_updated_rx) = watch::channel(); + + cx.background() + .spawn({ + let background_snapshot = background_snapshot.clone(); + async move { + while let Some(update) = updates_rx.next().await { + if let Err(error) = + background_snapshot.lock().apply_remote_update(update) + { + log::error!("error applying worktree update: {}", error); + } + snapshot_updated_tx.send(()).await.ok(); + } } - snapshot_updated_tx.send(()).await.ok(); - } - }) - .detach(); + }) + .detach(); - cx.spawn(|mut cx| { - let this = worktree_handle.downgrade(); - async move { + cx.spawn_weak(|this, mut cx| async move { while (snapshot_updated_rx.recv().await).is_some() { if let Some(this) = this.upgrade(&cx) { this.update(&mut cx, |this, cx| { - this.poll_snapshot(cx); let this = this.as_remote_mut().unwrap(); + this.snapshot = this.background_snapshot.lock().clone(); + cx.emit(Event::UpdatedEntries(Default::default())); + cx.notify(); while let Some((scan_id, _)) = this.snapshot_subscriptions.front() { if this.observed_snapshot(*scan_id) { let (_, tx) = this.snapshot_subscriptions.pop_front().unwrap(); @@ -287,11 +346,22 @@ impl Worktree { break; } } - } - }) - .detach(); + }) + .detach(); - worktree_handle + Worktree::Remote(RemoteWorktree { + project_id: project_remote_id, + replica_id, + snapshot: snapshot.clone(), + background_snapshot, + updates_tx: Some(updates_tx), + snapshot_subscriptions: Default::default(), + client: client.clone(), + diagnostic_summaries: Default::default(), + visible: worktree.visible, + disconnected: false, + }) + }) } pub fn as_local(&self) -> Option<&LocalWorktree> { @@ -380,13 +450,6 @@ impl Worktree { .map(|(path, summary)| (path.0.clone(), *summary)) } - fn poll_snapshot(&mut self, cx: &mut ModelContext) { - match self { - Self::Local(worktree) => worktree.poll_snapshot(false, cx), - Self::Remote(worktree) => worktree.poll_snapshot(cx), - }; - } - pub fn abs_path(&self) -> Arc { match self { Worktree::Local(worktree) => worktree.abs_path.clone(), @@ -396,90 +459,6 @@ impl Worktree { } impl LocalWorktree { - async fn create( - client: Arc, - path: impl Into>, - visible: bool, - fs: Arc, - next_entry_id: Arc, - cx: &mut AsyncAppContext, - ) -> Result<(ModelHandle, UnboundedSender)> { - let abs_path = path.into(); - let path: Arc = Arc::from(Path::new("")); - - // After determining whether the root entry is a file or a directory, populate the - // snapshot's "root name", which will be used for the purpose of fuzzy matching. - let root_name = abs_path - .file_name() - .map_or(String::new(), |f| f.to_string_lossy().to_string()); - let root_char_bag = root_name.chars().map(|c| c.to_ascii_lowercase()).collect(); - let metadata = fs - .metadata(&abs_path) - .await - .context("failed to stat worktree path")?; - - let (scan_states_tx, mut scan_states_rx) = mpsc::unbounded(); - let (mut last_scan_state_tx, last_scan_state_rx) = - watch::channel_with(ScanState::Initializing); - let tree = cx.add_model(move |cx: &mut ModelContext| { - let mut snapshot = LocalSnapshot { - ignores_by_parent_abs_path: Default::default(), - git_repositories: Default::default(), - removed_entry_ids: Default::default(), - next_entry_id, - snapshot: Snapshot { - id: WorktreeId::from_usize(cx.model_id()), - abs_path, - root_name: root_name.clone(), - root_char_bag, - entries_by_path: Default::default(), - entries_by_id: Default::default(), - scan_id: 0, - completed_scan_id: 0, - }, - }; - if let Some(metadata) = metadata { - let entry = Entry::new( - path, - &metadata, - &snapshot.next_entry_id, - snapshot.root_char_bag, - ); - snapshot.insert_entry(entry, fs.as_ref()); - } - - let tree = Self { - snapshot: snapshot.clone(), - background_snapshot: Arc::new(Mutex::new(snapshot)), - last_scan_state_rx, - _background_scanner_task: None, - share: None, - poll_task: None, - diagnostics: Default::default(), - diagnostic_summaries: Default::default(), - client, - fs, - visible, - }; - - cx.spawn_weak(|this, mut cx| async move { - while let Some(scan_state) = scan_states_rx.next().await { - if let Some(this) = this.upgrade(&cx) { - last_scan_state_tx.blocking_send(scan_state).ok(); - this.update(&mut cx, |this, cx| this.poll_snapshot(cx)); - } else { - break; - } - } - }) - .detach(); - - Worktree::Local(tree) - }); - - Ok((tree, scan_states_tx)) - } - pub fn contains_abs_path(&self, path: &Path) -> bool { path.starts_with(&self.abs_path) } @@ -557,68 +536,54 @@ impl LocalWorktree { Ok(updated) } - fn poll_snapshot(&mut self, force: bool, cx: &mut ModelContext) { - self.poll_task.take(); - - match self.scan_state() { - ScanState::Idle => { - let new_snapshot = self.background_snapshot.lock().clone(); - let updated_repos = Self::changed_repos( - &self.snapshot.git_repositories, - &new_snapshot.git_repositories, - ); - self.snapshot = new_snapshot; - - if let Some(share) = self.share.as_mut() { - *share.snapshots_tx.borrow_mut() = self.snapshot.clone(); - } - - cx.emit(Event::UpdatedEntries); - - if !updated_repos.is_empty() { - cx.emit(Event::UpdatedGitRepositories(updated_repos)); - } + fn background_scanner_updated( + &mut self, + scan_state: ScanState, + cx: &mut ModelContext, + ) { + match scan_state { + ScanState::Initializing { snapshot, barrier } => { + *self.is_scanning.0.borrow_mut() = true; + self.set_snapshot(snapshot, cx); + drop(barrier); } - - ScanState::Initializing => { - let is_fake_fs = self.fs.is_fake(); - - let new_snapshot = self.background_snapshot.lock().clone(); - let updated_repos = Self::changed_repos( - &self.snapshot.git_repositories, - &new_snapshot.git_repositories, - ); - self.snapshot = new_snapshot; - - self.poll_task = Some(cx.spawn_weak(|this, mut cx| async move { - if is_fake_fs { - #[cfg(any(test, feature = "test-support"))] - cx.background().simulate_random_delay().await; - } else { - smol::Timer::after(Duration::from_millis(100)).await; - } - if let Some(this) = this.upgrade(&cx) { - this.update(&mut cx, |this, cx| this.poll_snapshot(cx)); - } - })); - - cx.emit(Event::UpdatedEntries); - - if !updated_repos.is_empty() { - cx.emit(Event::UpdatedGitRepositories(updated_repos)); - } + ScanState::Initialized { snapshot } => { + *self.is_scanning.0.borrow_mut() = false; + self.set_snapshot(snapshot, cx); } - - _ => { - if force { - self.snapshot = self.background_snapshot.lock().clone(); - } + ScanState::Updating => { + *self.is_scanning.0.borrow_mut() = true; + } + ScanState::Updated { + snapshot, + changes, + barrier, + } => { + *self.is_scanning.0.borrow_mut() = false; + cx.emit(Event::UpdatedEntries(changes)); + self.set_snapshot(snapshot, cx); + drop(barrier); } } - cx.notify(); } + fn set_snapshot(&mut self, new_snapshot: LocalSnapshot, cx: &mut ModelContext) { + let updated_repos = Self::changed_repos( + &self.snapshot.git_repositories, + &new_snapshot.git_repositories, + ); + self.snapshot = new_snapshot; + + if let Some(share) = self.share.as_mut() { + *share.snapshots_tx.borrow_mut() = self.snapshot.clone(); + } + + if !updated_repos.is_empty() { + cx.emit(Event::UpdatedGitRepositories(updated_repos)); + } + } + fn changed_repos( old_repos: &[GitRepositoryEntry], new_repos: &[GitRepositoryEntry], @@ -648,19 +613,19 @@ impl LocalWorktree { } pub fn scan_complete(&self) -> impl Future { - let mut scan_state_rx = self.last_scan_state_rx.clone(); + let mut is_scanning_rx = self.is_scanning.1.clone(); async move { - let mut scan_state = Some(scan_state_rx.borrow().clone()); - while let Some(ScanState::Initializing | ScanState::Updating) = scan_state { - scan_state = scan_state_rx.recv().await; + let mut is_scanning = is_scanning_rx.borrow().clone(); + while is_scanning { + if let Some(value) = is_scanning_rx.recv().await { + is_scanning = value; + } else { + break; + } } } } - fn scan_state(&self) -> ScanState { - self.last_scan_state_rx.borrow().clone() - } - pub fn snapshot(&self) -> LocalSnapshot { self.snapshot.clone() } @@ -704,9 +669,7 @@ impl LocalWorktree { // Eagerly populate the snapshot with an updated entry for the loaded file let entry = this .update(&mut cx, |this, cx| { - this.as_local() - .unwrap() - .refresh_entry(path, abs_path, None, cx) + this.as_local().unwrap().refresh_entry(path, None, cx) }) .await?; @@ -797,15 +760,25 @@ impl LocalWorktree { is_dir: bool, cx: &mut ModelContext, ) -> Task> { - self.write_entry_internal( - path, + let path = path.into(); + let abs_path = self.absolutize(&path); + let fs = self.fs.clone(); + let write = cx.background().spawn(async move { if is_dir { - None + fs.create_dir(&abs_path).await } else { - Some(Default::default()) - }, - cx, - ) + fs.save(&abs_path, &Default::default(), Default::default()) + .await + } + }); + + cx.spawn(|this, mut cx| async move { + write.await?; + this.update(&mut cx, |this, cx| { + this.as_local_mut().unwrap().refresh_entry(path, None, cx) + }) + .await + }) } pub fn write_file( @@ -815,7 +788,20 @@ impl LocalWorktree { line_ending: LineEnding, cx: &mut ModelContext, ) -> Task> { - self.write_entry_internal(path, Some((text, line_ending)), cx) + let path = path.into(); + let abs_path = self.absolutize(&path); + let fs = self.fs.clone(); + let write = cx + .background() + .spawn(async move { fs.save(&abs_path, &text, line_ending).await }); + + cx.spawn(|this, mut cx| async move { + write.await?; + this.update(&mut cx, |this, cx| { + this.as_local_mut().unwrap().refresh_entry(path, None, cx) + }) + .await + }) } pub fn delete_entry( @@ -824,36 +810,40 @@ impl LocalWorktree { cx: &mut ModelContext, ) -> Option>> { let entry = self.entry_for_id(entry_id)?.clone(); - let abs_path = self.absolutize(&entry.path); - let delete = cx.background().spawn({ - let fs = self.fs.clone(); - let abs_path = abs_path; - async move { - if entry.is_file() { - fs.remove_file(&abs_path, Default::default()).await - } else { - fs.remove_dir( - &abs_path, - RemoveOptions { - recursive: true, - ignore_if_not_exists: false, - }, - ) - .await - } + let abs_path = self.abs_path.clone(); + let fs = self.fs.clone(); + + let delete = cx.background().spawn(async move { + let mut abs_path = fs.canonicalize(&abs_path).await?; + if entry.path.file_name().is_some() { + abs_path = abs_path.join(&entry.path); + } + if entry.is_file() { + fs.remove_file(&abs_path, Default::default()).await?; + } else { + fs.remove_dir( + &abs_path, + RemoveOptions { + recursive: true, + ignore_if_not_exists: false, + }, + ) + .await?; } + anyhow::Ok(abs_path) }); Some(cx.spawn(|this, mut cx| async move { - delete.await?; - this.update(&mut cx, |this, cx| { - let this = this.as_local_mut().unwrap(); - { - let mut snapshot = this.background_snapshot.lock(); - snapshot.delete_entry(entry_id); - } - this.poll_snapshot(true, cx); + let abs_path = delete.await?; + let (tx, mut rx) = barrier::channel(); + this.update(&mut cx, |this, _| { + this.as_local_mut() + .unwrap() + .path_changes_tx + .try_send((vec![abs_path], tx)) + .unwrap(); }); + rx.recv().await; Ok(()) })) } @@ -867,29 +857,21 @@ impl LocalWorktree { let old_path = self.entry_for_id(entry_id)?.path.clone(); let new_path = new_path.into(); let abs_old_path = self.absolutize(&old_path); - let abs_new_path = self.absolutize(new_path.as_ref()); - let rename = cx.background().spawn({ - let fs = self.fs.clone(); - let abs_new_path = abs_new_path.clone(); - async move { - fs.rename(&abs_old_path, &abs_new_path, Default::default()) - .await - } + let abs_new_path = self.absolutize(&new_path); + let fs = self.fs.clone(); + let rename = cx.background().spawn(async move { + fs.rename(&abs_old_path, &abs_new_path, Default::default()) + .await }); Some(cx.spawn(|this, mut cx| async move { rename.await?; - let entry = this - .update(&mut cx, |this, cx| { - this.as_local_mut().unwrap().refresh_entry( - new_path.clone(), - abs_new_path, - Some(old_path), - cx, - ) - }) - .await?; - Ok(entry) + this.update(&mut cx, |this, cx| { + this.as_local_mut() + .unwrap() + .refresh_entry(new_path.clone(), Some(old_path), cx) + }) + .await })) } @@ -903,111 +885,63 @@ impl LocalWorktree { let new_path = new_path.into(); let abs_old_path = self.absolutize(&old_path); let abs_new_path = self.absolutize(&new_path); - let copy = cx.background().spawn({ - let fs = self.fs.clone(); - let abs_new_path = abs_new_path.clone(); - async move { - copy_recursive( - fs.as_ref(), - &abs_old_path, - &abs_new_path, - Default::default(), - ) - .await - } + let fs = self.fs.clone(); + let copy = cx.background().spawn(async move { + copy_recursive( + fs.as_ref(), + &abs_old_path, + &abs_new_path, + Default::default(), + ) + .await }); Some(cx.spawn(|this, mut cx| async move { copy.await?; - let entry = this - .update(&mut cx, |this, cx| { - this.as_local_mut().unwrap().refresh_entry( - new_path.clone(), - abs_new_path, - None, - cx, - ) - }) - .await?; - Ok(entry) + this.update(&mut cx, |this, cx| { + this.as_local_mut() + .unwrap() + .refresh_entry(new_path.clone(), None, cx) + }) + .await })) } - fn write_entry_internal( - &self, - path: impl Into>, - text_if_file: Option<(Rope, LineEnding)>, - cx: &mut ModelContext, - ) -> Task> { - let path = path.into(); - let abs_path = self.absolutize(&path); - let write = cx.background().spawn({ - let fs = self.fs.clone(); - let abs_path = abs_path.clone(); - async move { - if let Some((text, line_ending)) = text_if_file { - fs.save(&abs_path, &text, line_ending).await - } else { - fs.create_dir(&abs_path).await - } - } - }); - - cx.spawn(|this, mut cx| async move { - write.await?; - let entry = this - .update(&mut cx, |this, cx| { - this.as_local_mut() - .unwrap() - .refresh_entry(path, abs_path, None, cx) - }) - .await?; - Ok(entry) - }) - } - fn refresh_entry( &self, path: Arc, - abs_path: PathBuf, old_path: Option>, cx: &mut ModelContext, ) -> Task> { let fs = self.fs.clone(); - let root_char_bag; - let next_entry_id; - { - let snapshot = self.background_snapshot.lock(); - root_char_bag = snapshot.root_char_bag; - next_entry_id = snapshot.next_entry_id.clone(); - } - cx.spawn_weak(|this, mut cx| async move { - let metadata = fs - .metadata(&abs_path) - .await? - .ok_or_else(|| anyhow!("could not read saved file metadata"))?; - let this = this - .upgrade(&cx) - .ok_or_else(|| anyhow!("worktree was dropped"))?; - this.update(&mut cx, |this, cx| { - let this = this.as_local_mut().unwrap(); - let inserted_entry; - { - let mut snapshot = this.background_snapshot.lock(); - let mut entry = Entry::new(path, &metadata, &next_entry_id, root_char_bag); - entry.is_ignored = snapshot - .ignore_stack_for_abs_path(&abs_path, entry.is_dir()) - .is_abs_path_ignored(&abs_path, entry.is_dir()); - if let Some(old_path) = old_path { - snapshot.remove_path(&old_path); - } - snapshot.scan_started(); - inserted_entry = snapshot.insert_entry(entry, fs.as_ref()); - snapshot.scan_completed(); - } - this.poll_snapshot(true, cx); - Ok(inserted_entry) - }) + let abs_root_path = self.abs_path.clone(); + let path_changes_tx = self.path_changes_tx.clone(); + cx.spawn_weak(move |this, mut cx| async move { + let abs_path = fs.canonicalize(&abs_root_path).await?; + let mut paths = Vec::with_capacity(2); + paths.push(if path.file_name().is_some() { + abs_path.join(&path) + } else { + abs_path.clone() + }); + if let Some(old_path) = old_path { + paths.push(if old_path.file_name().is_some() { + abs_path.join(&old_path) + } else { + abs_path.clone() + }); + } + + let (tx, mut rx) = barrier::channel(); + path_changes_tx.try_send((paths, tx)).unwrap(); + rx.recv().await; + this.upgrade(&cx) + .ok_or_else(|| anyhow!("worktree was dropped"))? + .update(&mut cx, |this, _| { + this.entry_for_path(path) + .cloned() + .ok_or_else(|| anyhow!("failed to read path after update")) + }) }) } @@ -1109,12 +1043,6 @@ impl RemoteWorktree { self.snapshot.clone() } - fn poll_snapshot(&mut self, cx: &mut ModelContext) { - self.snapshot = self.background_snapshot.lock().clone(); - cx.emit(Event::UpdatedEntries); - cx.notify(); - } - pub fn disconnected_from_host(&mut self) { self.updates_tx.take(); self.snapshot_subscriptions.clear(); @@ -1274,28 +1202,25 @@ impl Snapshot { Ok(entry) } - fn delete_entry(&mut self, entry_id: ProjectEntryId) -> bool { - if let Some(removed_entry) = self.entries_by_id.remove(&entry_id, &()) { - self.entries_by_path = { - let mut cursor = self.entries_by_path.cursor(); - let mut new_entries_by_path = - cursor.slice(&TraversalTarget::Path(&removed_entry.path), Bias::Left, &()); - while let Some(entry) = cursor.item() { - if entry.path.starts_with(&removed_entry.path) { - self.entries_by_id.remove(&entry.id, &()); - cursor.next(&()); - } else { - break; - } + fn delete_entry(&mut self, entry_id: ProjectEntryId) -> Option> { + let removed_entry = self.entries_by_id.remove(&entry_id, &())?; + self.entries_by_path = { + let mut cursor = self.entries_by_path.cursor(); + let mut new_entries_by_path = + cursor.slice(&TraversalTarget::Path(&removed_entry.path), Bias::Left, &()); + while let Some(entry) = cursor.item() { + if entry.path.starts_with(&removed_entry.path) { + self.entries_by_id.remove(&entry.id, &()); + cursor.next(&()); + } else { + break; } - new_entries_by_path.push_tree(cursor.suffix(&()), &()); - new_entries_by_path - }; + } + new_entries_by_path.push_tree(cursor.suffix(&()), &()); + new_entries_by_path + }; - true - } else { - false - } + Some(removed_entry.path) } pub(crate) fn apply_remote_update(&mut self, update: proto::UpdateWorktree) -> Result<()> { @@ -1462,7 +1387,10 @@ impl LocalSnapshot { .cloned() } - pub(crate) fn in_dot_git(&mut self, path: &Path) -> Option<&mut GitRepositoryEntry> { + pub(crate) fn repo_with_dot_git_containing( + &mut self, + path: &Path, + ) -> Option<&mut GitRepositoryEntry> { // Git repositories cannot be nested, so we don't need to reverse the order self.git_repositories .iter_mut() @@ -1764,7 +1692,7 @@ impl GitRepositoryEntry { path.starts_with(self.content_path.as_ref()) } - // Note that theis path should be relative to the worktree root. + // Note that this path should be relative to the worktree root. pub(crate) fn in_dot_git(&self, path: &Path) -> bool { path.starts_with(self.git_dir_path.as_ref()) } @@ -2048,6 +1976,14 @@ pub enum EntryKind { File(CharBag), } +#[derive(Clone, Copy, Debug)] +pub enum PathChange { + Added, + Removed, + Updated, + AddedOrUpdated, +} + impl Entry { fn new( path: Arc, @@ -2205,79 +2141,42 @@ impl<'a> sum_tree::Dimension<'a, EntrySummary> for PathKey { struct BackgroundScanner { fs: Arc, - snapshot: Arc>, + snapshot: Mutex, notify: UnboundedSender, executor: Arc, } impl BackgroundScanner { fn new( - snapshot: Arc>, + snapshot: LocalSnapshot, notify: UnboundedSender, fs: Arc, executor: Arc, - ) -> Self { - Self { - fs, - snapshot, - notify, - executor, - } - } - - fn abs_path(&self) -> Arc { - self.snapshot.lock().abs_path.clone() - } - - fn snapshot(&self) -> LocalSnapshot { - self.snapshot.lock().clone() - } - - async fn run(mut self, events_rx: impl Stream>) { - if self.notify.unbounded_send(ScanState::Initializing).is_err() { - return; - } - - if let Err(err) = self.scan_dirs().await { - if self - .notify - .unbounded_send(ScanState::Err(Arc::new(err))) - .is_err() - { - return; - } - } - - if self.notify.unbounded_send(ScanState::Idle).is_err() { - return; - } - - futures::pin_mut!(events_rx); - - while let Some(mut events) = events_rx.next().await { - while let Poll::Ready(Some(additional_events)) = futures::poll!(events_rx.next()) { - events.extend(additional_events); - } - - if self.notify.unbounded_send(ScanState::Updating).is_err() { - break; - } - - if !self.process_events(events).await { - break; - } - - if self.notify.unbounded_send(ScanState::Idle).is_err() { - break; - } + ) -> Self { + Self { + fs, + snapshot: Mutex::new(snapshot), + notify, + executor, } } - async fn scan_dirs(&mut self) -> Result<()> { + fn abs_path(&self) -> Arc { + self.snapshot.lock().abs_path.clone() + } + + async fn run( + self, + events_rx: impl Stream>, + mut changed_paths: channel::Receiver<(Vec, barrier::Sender)>, + ) { + use futures::FutureExt as _; + + // Retrieve the basic properties of the root node. let root_char_bag; let root_abs_path; let root_inode; - let is_dir; + let root_is_dir; let next_entry_id; { let mut snapshot = self.snapshot.lock(); @@ -2285,11 +2184,12 @@ impl BackgroundScanner { root_char_bag = snapshot.root_char_bag; root_abs_path = snapshot.abs_path.clone(); root_inode = snapshot.root_entry().map(|e| e.inode); - is_dir = snapshot.root_entry().map_or(false, |e| e.is_dir()); + root_is_dir = snapshot.root_entry().map_or(false, |e| e.is_dir()); next_entry_id = snapshot.next_entry_id.clone(); - }; + } // Populate ignores above the root. + let ignore_stack; for ancestor in root_abs_path.ancestors().skip(1) { if let Ok(ignore) = build_gitignore(&ancestor.join(&*GITIGNORE), self.fs.as_ref()).await { @@ -2299,21 +2199,18 @@ impl BackgroundScanner { .insert(ancestor.into(), (ignore.into(), 0)); } } - - let ignore_stack = { + { let mut snapshot = self.snapshot.lock(); - let ignore_stack = snapshot.ignore_stack_for_abs_path(&root_abs_path, true); + ignore_stack = snapshot.ignore_stack_for_abs_path(&root_abs_path, true); if ignore_stack.is_all() { if let Some(mut root_entry) = snapshot.root_entry().cloned() { root_entry.is_ignored = true; snapshot.insert_entry(root_entry, self.fs.as_ref()); } } - ignore_stack }; - if is_dir { - let path: Arc = Arc::from(Path::new("")); + if root_is_dir { let mut ancestor_inodes = TreeSet::default(); if let Some(root_inode) = root_inode { ancestor_inodes.insert(root_inode); @@ -2323,7 +2220,7 @@ impl BackgroundScanner { self.executor .block(tx.send(ScanJob { abs_path: root_abs_path.to_path_buf(), - path, + path: Arc::from(Path::new("")), ignore_stack, ancestor_inodes, scan_queue: tx.clone(), @@ -2331,27 +2228,163 @@ impl BackgroundScanner { .unwrap(); drop(tx); + let progress_update_count = AtomicUsize::new(0); self.executor .scoped(|scope| { for _ in 0..self.executor.num_cpus() { scope.spawn(async { - while let Ok(job) = rx.recv().await { - if let Err(err) = self - .scan_dir(root_char_bag, next_entry_id.clone(), &job) - .await - { - log::error!("error scanning {:?}: {}", job.abs_path, err); + let mut last_progress_update_count = 0; + let progress_update_timer = self.pause_between_progress_updates().fuse(); + futures::pin_mut!(progress_update_timer); + loop { + select_biased! { + // Send periodic progress updates to the worktree. Use an atomic counter + // to ensure that only one of the workers sends a progress update after + // the update interval elapses. + _ = progress_update_timer => { + match progress_update_count.compare_exchange( + last_progress_update_count, + last_progress_update_count + 1, + SeqCst, + SeqCst + ) { + Ok(_) => { + last_progress_update_count += 1; + if self + .notify + .unbounded_send(ScanState::Initializing { + snapshot: self.snapshot.lock().clone(), + barrier: None, + }) + .is_err() + { + break; + } + } + Err(current_count) => last_progress_update_count = current_count, + } + progress_update_timer.set(self.pause_between_progress_updates().fuse()); + } + + // Refresh any paths requested by the main thread. + job = changed_paths.recv().fuse() => { + let Ok((abs_paths, barrier)) = job else { break }; + self.update_entries_for_paths(abs_paths, None).await; + if self + .notify + .unbounded_send(ScanState::Initializing { + snapshot: self.snapshot.lock().clone(), + barrier: Some(barrier), + }) + .is_err() + { + break; + } + } + + // Recursively load directories from the file system. + job = rx.recv().fuse() => { + let Ok(job) = job else { break }; + if let Err(err) = self + .scan_dir(root_char_bag, next_entry_id.clone(), &job) + .await + { + log::error!("error scanning {:?}: {}", job.abs_path, err); + } + } } } }); } }) .await; + } - self.snapshot.lock().scan_completed(); + self.snapshot.lock().scan_completed(); + + if self + .notify + .unbounded_send(ScanState::Initialized { + snapshot: self.snapshot.lock().clone(), + }) + .is_err() + { + return; } - Ok(()) + // Process any events that occurred while performing the initial scan. These + // events can't be reported as precisely, because there is no snapshot of the + // worktree before they occurred. + futures::pin_mut!(events_rx); + if let Poll::Ready(Some(mut events)) = futures::poll!(events_rx.next()) { + while let Poll::Ready(Some(additional_events)) = futures::poll!(events_rx.next()) { + events.extend(additional_events); + } + let abs_paths = events.into_iter().map(|e| e.path).collect(); + if self.notify.unbounded_send(ScanState::Updating).is_err() { + return; + } + if let Some(changes) = self.process_events(abs_paths, true).await { + if self + .notify + .unbounded_send(ScanState::Updated { + snapshot: self.snapshot.lock().clone(), + changes, + barrier: None, + }) + .is_err() + { + return; + } + } else { + return; + } + } + + // Continue processing events until the worktree is dropped. + loop { + let barrier; + let abs_paths; + select_biased! { + request = changed_paths.next().fuse() => { + let Some((paths, b)) = request else { break }; + abs_paths = paths; + barrier = Some(b); + } + events = events_rx.next().fuse() => { + let Some(events) = events else { break }; + abs_paths = events.into_iter().map(|e| e.path).collect(); + barrier = None; + } + } + + if self.notify.unbounded_send(ScanState::Updating).is_err() { + return; + } + if let Some(changes) = self.process_events(abs_paths, false).await { + if self + .notify + .unbounded_send(ScanState::Updated { + snapshot: self.snapshot.lock().clone(), + changes, + barrier, + }) + .is_err() + { + return; + } + } else { + return; + } + } + } + + async fn pause_between_progress_updates(&self) { + #[cfg(any(test, feature = "test-support"))] + if self.fs.is_fake() { + return self.executor.simulate_random_delay().await; + } + smol::Timer::after(Duration::from_millis(100)).await; } async fn scan_dir( @@ -2479,79 +2512,122 @@ impl BackgroundScanner { Ok(()) } - async fn process_events(&mut self, mut events: Vec) -> bool { - events.sort_unstable_by(|a, b| a.path.cmp(&b.path)); - events.dedup_by(|a, b| a.path.starts_with(&b.path)); + async fn process_events( + &self, + abs_paths: Vec, + received_before_initialized: bool, + ) -> Option, PathChange>> { + let (scan_queue_tx, scan_queue_rx) = channel::unbounded(); - let root_char_bag; - let root_abs_path; - let next_entry_id; - { + let prev_snapshot = { let mut snapshot = self.snapshot.lock(); snapshot.scan_started(); - root_char_bag = snapshot.root_char_bag; - root_abs_path = snapshot.abs_path.clone(); - next_entry_id = snapshot.next_entry_id.clone(); - } - - let root_canonical_path = if let Ok(path) = self.fs.canonicalize(&root_abs_path).await { - path - } else { - return false; + snapshot.clone() }; + + let event_paths = self + .update_entries_for_paths(abs_paths, Some(scan_queue_tx)) + .await?; + + // Scan any directories that were created as part of this event batch. + self.executor + .scoped(|scope| { + for _ in 0..self.executor.num_cpus() { + scope.spawn(async { + while let Ok(job) = scan_queue_rx.recv().await { + if let Err(err) = self + .scan_dir( + prev_snapshot.root_char_bag, + prev_snapshot.next_entry_id.clone(), + &job, + ) + .await + { + log::error!("error scanning {:?}: {}", job.abs_path, err); + } + } + }); + } + }) + .await; + + // Attempt to detect renames only over a single batch of file-system events. + self.snapshot.lock().removed_entry_ids.clear(); + + self.update_ignore_statuses().await; + self.update_git_repositories(); + let changes = self.build_change_set( + prev_snapshot.snapshot, + event_paths, + received_before_initialized, + ); + self.snapshot.lock().scan_completed(); + Some(changes) + } + + async fn update_entries_for_paths( + &self, + mut abs_paths: Vec, + scan_queue_tx: Option>, + ) -> Option>> { + abs_paths.sort_unstable(); + abs_paths.dedup_by(|a, b| a.starts_with(&b)); + + let root_abs_path = self.snapshot.lock().abs_path.clone(); + let root_canonical_path = self.fs.canonicalize(&root_abs_path).await.ok()?; let metadata = futures::future::join_all( - events + abs_paths .iter() - .map(|event| self.fs.metadata(&event.path)) + .map(|abs_path| self.fs.metadata(&abs_path)) .collect::>(), ) .await; - // Hold the snapshot lock while clearing and re-inserting the root entries - // for each event. This way, the snapshot is not observable to the foreground - // thread while this operation is in-progress. - let (scan_queue_tx, scan_queue_rx) = channel::unbounded(); - { - let mut snapshot = self.snapshot.lock(); - for event in &events { - if let Ok(path) = event.path.strip_prefix(&root_canonical_path) { + let mut snapshot = self.snapshot.lock(); + if scan_queue_tx.is_some() { + for abs_path in &abs_paths { + if let Ok(path) = abs_path.strip_prefix(&root_canonical_path) { snapshot.remove_path(path); } } + } - for (event, metadata) in events.into_iter().zip(metadata.into_iter()) { - let path: Arc = match event.path.strip_prefix(&root_canonical_path) { - Ok(path) => Arc::from(path.to_path_buf()), - Err(_) => { - log::error!( - "unexpected event {:?} for root path {:?}", - event.path, - root_canonical_path - ); - continue; - } - }; - let abs_path = root_abs_path.join(&path); - - match metadata { - Ok(Some(metadata)) => { - let ignore_stack = - snapshot.ignore_stack_for_abs_path(&abs_path, metadata.is_dir); - let mut fs_entry = Entry::new( - path.clone(), - &metadata, - snapshot.next_entry_id.as_ref(), - snapshot.root_char_bag, - ); - fs_entry.is_ignored = ignore_stack.is_all(); - snapshot.insert_entry(fs_entry, self.fs.as_ref()); + let mut event_paths = Vec::with_capacity(abs_paths.len()); + for (abs_path, metadata) in abs_paths.into_iter().zip(metadata.into_iter()) { + let path: Arc = match abs_path.strip_prefix(&root_canonical_path) { + Ok(path) => Arc::from(path.to_path_buf()), + Err(_) => { + log::error!( + "unexpected event {:?} for root path {:?}", + abs_path, + root_canonical_path + ); + continue; + } + }; + event_paths.push(path.clone()); + let abs_path = root_abs_path.join(&path); + + match metadata { + Ok(Some(metadata)) => { + let ignore_stack = + snapshot.ignore_stack_for_abs_path(&abs_path, metadata.is_dir); + let mut fs_entry = Entry::new( + path.clone(), + &metadata, + snapshot.next_entry_id.as_ref(), + snapshot.root_char_bag, + ); + fs_entry.is_ignored = ignore_stack.is_all(); + snapshot.insert_entry(fs_entry, self.fs.as_ref()); - let scan_id = snapshot.scan_id; - if let Some(repo) = snapshot.in_dot_git(&path) { - repo.repo.lock().reload_index(); - repo.scan_id = scan_id; - } + let scan_id = snapshot.scan_id; + if let Some(repo) = snapshot.repo_with_dot_git_containing(&path) { + repo.repo.lock().reload_index(); + repo.scan_id = scan_id; + } + if let Some(scan_queue_tx) = &scan_queue_tx { let mut ancestor_inodes = snapshot.ancestor_inodes_for_path(&path); if metadata.is_dir && !ancestor_inodes.contains(&metadata.inode) { ancestor_inodes.insert(metadata.inode); @@ -2566,46 +2642,20 @@ impl BackgroundScanner { .unwrap(); } } - Ok(None) => {} - Err(err) => { - // TODO - create a special 'error' entry in the entries tree to mark this - log::error!("error reading file on event {:?}", err); - } + } + Ok(None) => {} + Err(err) => { + // TODO - create a special 'error' entry in the entries tree to mark this + log::error!("error reading file on event {:?}", err); } } - drop(scan_queue_tx); } - // Scan any directories that were created as part of this event batch. - self.executor - .scoped(|scope| { - for _ in 0..self.executor.num_cpus() { - scope.spawn(async { - while let Ok(job) = scan_queue_rx.recv().await { - if let Err(err) = self - .scan_dir(root_char_bag, next_entry_id.clone(), &job) - .await - { - log::error!("error scanning {:?}: {}", job.abs_path, err); - } - } - }); - } - }) - .await; - - // Attempt to detect renames only over a single batch of file-system events. - self.snapshot.lock().removed_entry_ids.clear(); - - self.update_ignore_statuses().await; - self.update_git_repositories(); - self.snapshot.lock().scan_completed(); - true + Some(event_paths) } async fn update_ignore_statuses(&self) { - let mut snapshot = self.snapshot(); - + let mut snapshot = self.snapshot.lock().clone(); let mut ignores_to_update = Vec::new(); let mut ignores_to_delete = Vec::new(); for (parent_abs_path, (_, scan_id)) in &snapshot.ignores_by_parent_abs_path { @@ -2714,6 +2764,73 @@ impl BackgroundScanner { snapshot.entries_by_path.edit(entries_by_path_edits, &()); snapshot.entries_by_id.edit(entries_by_id_edits, &()); } + + fn build_change_set( + &self, + old_snapshot: Snapshot, + event_paths: Vec>, + received_before_initialized: bool, + ) -> HashMap, PathChange> { + use PathChange::{Added, AddedOrUpdated, Removed, Updated}; + + let new_snapshot = self.snapshot.lock(); + let mut changes = HashMap::default(); + let mut old_paths = old_snapshot.entries_by_path.cursor::(); + let mut new_paths = new_snapshot.entries_by_path.cursor::(); + + for path in event_paths { + let path = PathKey(path); + old_paths.seek(&path, Bias::Left, &()); + new_paths.seek(&path, Bias::Left, &()); + + loop { + match (old_paths.item(), new_paths.item()) { + (Some(old_entry), Some(new_entry)) => { + if old_entry.path > path.0 + && new_entry.path > path.0 + && !old_entry.path.starts_with(&path.0) + && !new_entry.path.starts_with(&path.0) + { + break; + } + + match Ord::cmp(&old_entry.path, &new_entry.path) { + Ordering::Less => { + changes.insert(old_entry.path.clone(), Removed); + old_paths.next(&()); + } + Ordering::Equal => { + if received_before_initialized { + // If the worktree was not fully initialized when this event was generated, + // we can't know whether this entry was added during the scan or whether + // it was merely updated. + changes.insert(old_entry.path.clone(), AddedOrUpdated); + } else if old_entry.mtime != new_entry.mtime { + changes.insert(old_entry.path.clone(), Updated); + } + old_paths.next(&()); + new_paths.next(&()); + } + Ordering::Greater => { + changes.insert(new_entry.path.clone(), Added); + new_paths.next(&()); + } + } + } + (Some(old_entry), None) => { + changes.insert(old_entry.path.clone(), Removed); + old_paths.next(&()); + } + (None, Some(new_entry)) => { + changes.insert(new_entry.path.clone(), Added); + new_paths.next(&()); + } + (None, None) => break, + } + } + } + changes + } } fn char_bag_for_path(root_char_bag: CharBag, path: &Path) -> CharBag { @@ -2997,19 +3114,13 @@ impl<'a> TryFrom<(&'a CharBag, proto::Entry)> for Entry { #[cfg(test)] mod tests { use super::*; - use anyhow::Result; use client::test::FakeHttpClient; use fs::repository::FakeGitRepository; use fs::{FakeFs, RealFs}; use gpui::{executor::Deterministic, TestAppContext}; use rand::prelude::*; use serde_json::json; - use std::{ - env, - fmt::Write, - time::{SystemTime, UNIX_EPOCH}, - }; - + use std::{env, fmt::Write}; use util::test::temp_tree; #[gpui::test] @@ -3032,7 +3143,7 @@ mod tests { let tree = Worktree::local( client, - Arc::from(Path::new("/root")), + Path::new("/root"), true, fs, Default::default(), @@ -3093,7 +3204,7 @@ mod tests { let client = cx.read(|cx| Client::new(FakeHttpClient::with_404_response(), cx)); let tree = Worktree::local( client, - Arc::from(Path::new("/root")), + Path::new("/root"), true, fs.clone(), Default::default(), @@ -3454,7 +3565,7 @@ mod tests { } #[gpui::test(iterations = 100)] - fn test_random(mut rng: StdRng) { + async fn test_random_worktree_changes(cx: &mut TestAppContext, mut rng: StdRng) { let operations = env::var("OPERATIONS") .map(|o| o.parse().unwrap()) .unwrap_or(40); @@ -3462,88 +3573,123 @@ mod tests { .map(|o| o.parse().unwrap()) .unwrap_or(20); - let root_dir = tempdir::TempDir::new("worktree-test").unwrap(); + let root_dir = Path::new("/test"); + let fs = FakeFs::new(cx.background()) as Arc; + fs.as_fake().insert_tree(root_dir, json!({})).await; for _ in 0..initial_entries { - randomly_mutate_tree(root_dir.path(), 1.0, &mut rng).unwrap(); - } - log::info!("Generated initial tree"); - - let (notify_tx, _notify_rx) = mpsc::unbounded(); - let fs = Arc::new(RealFs); - let next_entry_id = Arc::new(AtomicUsize::new(0)); - let mut initial_snapshot = LocalSnapshot { - removed_entry_ids: Default::default(), - ignores_by_parent_abs_path: Default::default(), - git_repositories: Default::default(), - next_entry_id: next_entry_id.clone(), - snapshot: Snapshot { - id: WorktreeId::from_usize(0), - entries_by_path: Default::default(), - entries_by_id: Default::default(), - abs_path: root_dir.path().into(), - root_name: Default::default(), - root_char_bag: Default::default(), - scan_id: 0, - completed_scan_id: 0, - }, - }; - initial_snapshot.insert_entry( - Entry::new( - Path::new("").into(), - &smol::block_on(fs.metadata(root_dir.path())) - .unwrap() - .unwrap(), - &next_entry_id, - Default::default(), - ), - fs.as_ref(), - ); - let mut scanner = BackgroundScanner::new( - Arc::new(Mutex::new(initial_snapshot.clone())), - notify_tx, + randomly_mutate_tree(&fs, root_dir, 1.0, &mut rng).await; + } + log::info!("generated initial tree"); + + let next_entry_id = Arc::new(AtomicUsize::default()); + let client = cx.read(|cx| Client::new(FakeHttpClient::with_404_response(), cx)); + let worktree = Worktree::local( + client.clone(), + root_dir, + true, fs.clone(), - Arc::new(gpui::executor::Background::new()), - ); - smol::block_on(scanner.scan_dirs()).unwrap(); - scanner.snapshot().check_invariants(); + next_entry_id.clone(), + &mut cx.to_async(), + ) + .await + .unwrap(); + + worktree + .update(cx, |tree, _| tree.as_local_mut().unwrap().scan_complete()) + .await; + + // After the initial scan is complete, the `UpdatedEntries` event can + // be used to follow along with all changes to the worktree's snapshot. + worktree.update(cx, |tree, cx| { + let mut paths = tree + .as_local() + .unwrap() + .paths() + .cloned() + .collect::>(); + + cx.subscribe(&worktree, move |tree, _, event, _| { + if let Event::UpdatedEntries(changes) = event { + for (path, change_type) in changes.iter() { + let path = path.clone(); + let ix = match paths.binary_search(&path) { + Ok(ix) | Err(ix) => ix, + }; + match change_type { + PathChange::Added => { + assert_ne!(paths.get(ix), Some(&path)); + paths.insert(ix, path); + } + PathChange::Removed => { + assert_eq!(paths.get(ix), Some(&path)); + paths.remove(ix); + } + PathChange::Updated => { + assert_eq!(paths.get(ix), Some(&path)); + } + PathChange::AddedOrUpdated => { + if paths[ix] != path { + paths.insert(ix, path); + } + } + } + } + let new_paths = tree.paths().cloned().collect::>(); + assert_eq!(paths, new_paths, "incorrect changes: {:?}", changes); + } + }) + .detach(); + }); - let mut events = Vec::new(); let mut snapshots = Vec::new(); let mut mutations_len = operations; while mutations_len > 1 { - if !events.is_empty() && rng.gen_bool(0.4) { - let len = rng.gen_range(0..=events.len()); - let to_deliver = events.drain(0..len).collect::>(); - log::info!("Delivering events: {:#?}", to_deliver); - smol::block_on(scanner.process_events(to_deliver)); - scanner.snapshot().check_invariants(); + randomly_mutate_tree(&fs, root_dir, 1.0, &mut rng).await; + let buffered_event_count = fs.as_fake().buffered_event_count().await; + if buffered_event_count > 0 && rng.gen_bool(0.3) { + let len = rng.gen_range(0..=buffered_event_count); + log::info!("flushing {} events", len); + fs.as_fake().flush_events(len).await; } else { - events.extend(randomly_mutate_tree(root_dir.path(), 0.6, &mut rng).unwrap()); + randomly_mutate_tree(&fs, root_dir, 0.6, &mut rng).await; mutations_len -= 1; } + cx.foreground().run_until_parked(); if rng.gen_bool(0.2) { - snapshots.push(scanner.snapshot()); + log::info!("storing snapshot {}", snapshots.len()); + let snapshot = + worktree.read_with(cx, |tree, _| tree.as_local().unwrap().snapshot()); + snapshots.push(snapshot); } } - log::info!("Quiescing: {:#?}", events); - smol::block_on(scanner.process_events(events)); - scanner.snapshot().check_invariants(); - let (notify_tx, _notify_rx) = mpsc::unbounded(); - let mut new_scanner = BackgroundScanner::new( - Arc::new(Mutex::new(initial_snapshot)), - notify_tx, - scanner.fs.clone(), - scanner.executor.clone(), - ); - smol::block_on(new_scanner.scan_dirs()).unwrap(); - assert_eq!( - scanner.snapshot().to_vec(true), - new_scanner.snapshot().to_vec(true) - ); + log::info!("quiescing"); + fs.as_fake().flush_events(usize::MAX).await; + cx.foreground().run_until_parked(); + let snapshot = worktree.read_with(cx, |tree, _| tree.as_local().unwrap().snapshot()); + snapshot.check_invariants(); + + { + let new_worktree = Worktree::local( + client.clone(), + root_dir, + true, + fs.clone(), + next_entry_id, + &mut cx.to_async(), + ) + .await + .unwrap(); + new_worktree + .update(cx, |tree, _| tree.as_local_mut().unwrap().scan_complete()) + .await; + let new_snapshot = + new_worktree.read_with(cx, |tree, _| tree.as_local().unwrap().snapshot()); + assert_eq!(snapshot.to_vec(true), new_snapshot.to_vec(true)); + } - for mut prev_snapshot in snapshots { + for (i, mut prev_snapshot) in snapshots.into_iter().enumerate() { let include_ignored = rng.gen::(); if !include_ignored { let mut entries_by_path_edits = Vec::new(); @@ -3563,54 +3709,66 @@ mod tests { prev_snapshot.entries_by_id.edit(entries_by_id_edits, &()); } - let update = scanner - .snapshot() - .build_update(&prev_snapshot, 0, 0, include_ignored); - prev_snapshot.apply_remote_update(update).unwrap(); + let update = snapshot.build_update(&prev_snapshot, 0, 0, include_ignored); + prev_snapshot.apply_remote_update(update.clone()).unwrap(); assert_eq!( - prev_snapshot.to_vec(true), - scanner.snapshot().to_vec(include_ignored) + prev_snapshot.to_vec(include_ignored), + snapshot.to_vec(include_ignored), + "wrong update for snapshot {i}. update: {:?}", + update ); } } - fn randomly_mutate_tree( + async fn randomly_mutate_tree( + fs: &Arc, root_path: &Path, insertion_probability: f64, rng: &mut impl Rng, - ) -> Result> { - let root_path = root_path.canonicalize().unwrap(); - let (dirs, files) = read_dir_recursive(root_path.clone()); - - let mut events = Vec::new(); - let mut record_event = |path: PathBuf| { - events.push(fsevent::Event { - event_id: SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs(), - flags: fsevent::StreamFlags::empty(), - path, - }); - }; + ) { + let mut files = Vec::new(); + let mut dirs = Vec::new(); + for path in fs.as_fake().paths().await { + if path.starts_with(root_path) { + if fs.is_file(&path).await { + files.push(path); + } else { + dirs.push(path); + } + } + } if (files.is_empty() && dirs.len() == 1) || rng.gen_bool(insertion_probability) { let path = dirs.choose(rng).unwrap(); let new_path = path.join(gen_name(rng)); if rng.gen() { - log::info!("Creating dir {:?}", new_path.strip_prefix(root_path)?); - std::fs::create_dir(&new_path)?; + log::info!( + "creating dir {:?}", + new_path.strip_prefix(root_path).unwrap() + ); + fs.create_dir(&new_path).await.unwrap(); } else { - log::info!("Creating file {:?}", new_path.strip_prefix(root_path)?); - std::fs::write(&new_path, "")?; + log::info!( + "creating file {:?}", + new_path.strip_prefix(root_path).unwrap() + ); + fs.create_file(&new_path, Default::default()).await.unwrap(); } - record_event(new_path); } else if rng.gen_bool(0.05) { let ignore_dir_path = dirs.choose(rng).unwrap(); let ignore_path = ignore_dir_path.join(&*GITIGNORE); - let (subdirs, subfiles) = read_dir_recursive(ignore_dir_path.clone()); + let subdirs = dirs + .iter() + .filter(|d| d.starts_with(&ignore_dir_path)) + .cloned() + .collect::>(); + let subfiles = files + .iter() + .filter(|d| d.starts_with(&ignore_dir_path)) + .cloned() + .collect::>(); let files_to_ignore = { let len = rng.gen_range(0..=subfiles.len()); subfiles.choose_multiple(rng, len) @@ -3626,19 +3784,25 @@ mod tests { ignore_contents, "{}", path_to_ignore - .strip_prefix(&ignore_dir_path)? + .strip_prefix(&ignore_dir_path) + .unwrap() .to_str() .unwrap() ) .unwrap(); } log::info!( - "Creating {:?} with contents:\n{}", - ignore_path.strip_prefix(&root_path)?, + "creating gitignore {:?} with contents:\n{}", + ignore_path.strip_prefix(&root_path).unwrap(), ignore_contents ); - std::fs::write(&ignore_path, ignore_contents).unwrap(); - record_event(ignore_path); + fs.save( + &ignore_path, + &ignore_contents.as_str().into(), + Default::default(), + ) + .await + .unwrap(); } else { let old_path = { let file_path = files.choose(rng); @@ -3657,61 +3821,62 @@ mod tests { let overwrite_existing_dir = !old_path.starts_with(&new_path_parent) && rng.gen_bool(0.3); let new_path = if overwrite_existing_dir { - std::fs::remove_dir_all(&new_path_parent).ok(); + fs.remove_dir( + &new_path_parent, + RemoveOptions { + recursive: true, + ignore_if_not_exists: true, + }, + ) + .await + .unwrap(); new_path_parent.to_path_buf() } else { new_path_parent.join(gen_name(rng)) }; log::info!( - "Renaming {:?} to {}{:?}", - old_path.strip_prefix(&root_path)?, + "renaming {:?} to {}{:?}", + old_path.strip_prefix(&root_path).unwrap(), if overwrite_existing_dir { "overwrite " } else { "" }, - new_path.strip_prefix(&root_path)? + new_path.strip_prefix(&root_path).unwrap() ); - std::fs::rename(&old_path, &new_path)?; - record_event(old_path.clone()); - record_event(new_path); - } else if old_path.is_dir() { - let (dirs, files) = read_dir_recursive(old_path.clone()); - - log::info!("Deleting dir {:?}", old_path.strip_prefix(&root_path)?); - std::fs::remove_dir_all(&old_path).unwrap(); - for file in files { - record_event(file); - } - for dir in dirs { - record_event(dir); - } - } else { - log::info!("Deleting file {:?}", old_path.strip_prefix(&root_path)?); - std::fs::remove_file(old_path).unwrap(); - record_event(old_path.clone()); - } - } - - Ok(events) - } - - fn read_dir_recursive(path: PathBuf) -> (Vec, Vec) { - let child_entries = std::fs::read_dir(&path).unwrap(); - let mut dirs = vec![path]; - let mut files = Vec::new(); - for child_entry in child_entries { - let child_path = child_entry.unwrap().path(); - if child_path.is_dir() { - let (child_dirs, child_files) = read_dir_recursive(child_path); - dirs.extend(child_dirs); - files.extend(child_files); + fs.rename( + &old_path, + &new_path, + fs::RenameOptions { + overwrite: true, + ignore_if_exists: true, + }, + ) + .await + .unwrap(); + } else if fs.is_file(&old_path).await { + log::info!( + "deleting file {:?}", + old_path.strip_prefix(&root_path).unwrap() + ); + fs.remove_file(old_path, Default::default()).await.unwrap(); } else { - files.push(child_path); + log::info!( + "deleting dir {:?}", + old_path.strip_prefix(&root_path).unwrap() + ); + fs.remove_dir( + &old_path, + RemoveOptions { + recursive: true, + ignore_if_not_exists: true, + }, + ) + .await + .unwrap(); } } - (dirs, files) } fn gen_name(rng: &mut impl Rng) -> String { diff --git a/crates/project_panel/Cargo.toml b/crates/project_panel/Cargo.toml index cc27f40954f6e49ac22693388e53099634a95d79..d245700d58ec1af022d12ef209f78f4690c4c04c 100644 --- a/crates/project_panel/Cargo.toml +++ b/crates/project_panel/Cargo.toml @@ -19,7 +19,7 @@ settings = { path = "../settings" } theme = { path = "../theme" } util = { path = "../util" } workspace = { path = "../workspace" } -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } futures = "0.3" unicase = "2.6" diff --git a/crates/project_symbols/Cargo.toml b/crates/project_symbols/Cargo.toml index e9283b14c9b7d2a9daa35c1ad01eaf3ac142383f..9e79b09d72ec7c398dd7cd29965a6eec797520a1 100644 --- a/crates/project_symbols/Cargo.toml +++ b/crates/project_symbols/Cargo.toml @@ -20,7 +20,7 @@ workspace = { path = "../workspace" } util = { path = "../util" } anyhow = "1.0.38" ordered-float = "2.1.1" -postage = { version = "0.4", features = ["futures-traits"] } +postage = { workspace = true } smol = "1.2" [dev-dependencies] diff --git a/crates/recent_projects/Cargo.toml b/crates/recent_projects/Cargo.toml index 037c6fd4fb765f47af8309ea614019a7d7736cb0..e8d851fa083ab85ef6a05f53c3a5eb07ab8e4667 100644 --- a/crates/recent_projects/Cargo.toml +++ b/crates/recent_projects/Cargo.toml @@ -19,5 +19,5 @@ settings = { path = "../settings" } text = { path = "../text" } workspace = { path = "../workspace" } ordered-float = "2.1.1" -postage = { version = "0.4", features = ["futures-traits"] } +postage = { workspace = true } smol = "1.2" diff --git a/crates/search/Cargo.toml b/crates/search/Cargo.toml index 85215c15b264c6b83fd38f87eba99973837131bb..e8c03a1a5e46db578d1f4dd961acb123a5235ce0 100644 --- a/crates/search/Cargo.toml +++ b/crates/search/Cargo.toml @@ -22,7 +22,7 @@ workspace = { path = "../workspace" } anyhow = "1.0" futures = "0.3" log = { version = "0.4.16", features = ["kv_unstable_serde"] } -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } serde = { version = "1.0", features = ["derive", "rc"] } serde_derive = { version = "1.0", features = ["deserialize_in_place"] } smallvec = { version = "1.6", features = ["union"] } diff --git a/crates/settings/Cargo.toml b/crates/settings/Cargo.toml index 1711bb335bd3efc9de99bda8a5fbfdadfd9c3e59..566fcfe3557649bacffb4e32a5f489b9d5d9e1cd 100644 --- a/crates/settings/Cargo.toml +++ b/crates/settings/Cargo.toml @@ -22,7 +22,7 @@ futures = "0.3" theme = { path = "../theme" } util = { path = "../util" } json_comments = "0.2" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } schemars = "0.8" serde = { workspace = true } serde_derive = { version = "1.0", features = ["deserialize_in_place"] } diff --git a/crates/text/Cargo.toml b/crates/text/Cargo.toml index 5fda4b613c03b88504e80a428aaaea05186efc0d..362a060c1f5b1cd85b6acb294e570eb8c37004aa 100644 --- a/crates/text/Cargo.toml +++ b/crates/text/Cargo.toml @@ -22,7 +22,7 @@ digest = { version = "0.9", features = ["std"] } lazy_static = "1.4" log = { version = "0.4.16", features = ["kv_unstable_serde"] } parking_lot = "0.11" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } rand = { version = "0.8.3", optional = true } smallvec = { version = "1.6", features = ["union"] } util = { path = "../util" } diff --git a/crates/theme_selector/Cargo.toml b/crates/theme_selector/Cargo.toml index 80ff31106948dec501b4d13863491964d9105ca6..2c922200b2ac8722bfa3a360318edf1ae49b296a 100644 --- a/crates/theme_selector/Cargo.toml +++ b/crates/theme_selector/Cargo.toml @@ -19,6 +19,5 @@ workspace = { path = "../workspace" } util = { path = "../util" } log = { version = "0.4.16", features = ["kv_unstable_serde"] } parking_lot = "0.11.1" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } smol = "1.2.5" - diff --git a/crates/vim/src/test/neovim_backed_test_context.rs b/crates/vim/src/test/neovim_backed_test_context.rs index a6bf5bc6faf6d39d832186e1fe441aa93c2d764b..b8e09d0b91b7edaa5a5333e678c193a5b92cca99 100644 --- a/crates/vim/src/test/neovim_backed_test_context.rs +++ b/crates/vim/src/test/neovim_backed_test_context.rs @@ -2,7 +2,7 @@ use std::ops::{Deref, DerefMut}; use collections::{HashMap, HashSet}; use gpui::ContextHandle; -use language::{OffsetRangeExt, Point}; +use language::OffsetRangeExt; use util::test::marked_text_offsets; use super::{neovim_connection::NeovimConnection, NeovimBackedBindingTestContext, VimTestContext}; @@ -108,11 +108,7 @@ impl<'a> NeovimBackedTestContext<'a> { pub async fn set_shared_state(&mut self, marked_text: &str) -> ContextHandle { let context_handle = self.set_state(marked_text, Mode::Normal); - - let selection = self.editor(|editor, cx| editor.selections.newest::(cx)); - let text = self.buffer_text(); - self.neovim.set_state(selection, &text).await; - + self.neovim.set_state(marked_text).await; context_handle } diff --git a/crates/vim/src/test/neovim_connection.rs b/crates/vim/src/test/neovim_connection.rs index 1850a031711fae2f67208495b665cf5cf2596e7c..538e83a8036f114c84c34f1c4e833ed449fa7c45 100644 --- a/crates/vim/src/test/neovim_connection.rs +++ b/crates/vim/src/test/neovim_connection.rs @@ -9,7 +9,7 @@ use async_trait::async_trait; #[cfg(feature = "neovim")] use gpui::keymap_matcher::Keystroke; -use language::{Point, Selection}; +use language::Point; #[cfg(feature = "neovim")] use lazy_static::lazy_static; @@ -36,11 +36,11 @@ lazy_static! { static ref NEOVIM_LOCK: ReentrantMutex<()> = ReentrantMutex::new(()); } -#[derive(Serialize, Deserialize)] +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] pub enum NeovimData { - Text(String), - Selection { start: (u32, u32), end: (u32, u32) }, - Mode(Option), + Put { state: String }, + Key(String), + Get { state: String, mode: Option }, } pub struct NeovimConnection { @@ -117,18 +117,30 @@ impl NeovimConnection { let key = format!("{start}{shift}{ctrl}{alt}{cmd}{}{end}", keystroke.key); + self.data + .push_back(NeovimData::Key(keystroke_text.to_string())); self.nvim .input(&key) .await .expect("Could not input keystroke"); } - // If not running with a live neovim connection, this is a no-op #[cfg(not(feature = "neovim"))] - pub async fn send_keystroke(&mut self, _keystroke_text: &str) {} + pub async fn send_keystroke(&mut self, keystroke_text: &str) { + if matches!(self.data.front(), Some(NeovimData::Get { .. })) { + self.data.pop_front(); + } + assert_eq!( + self.data.pop_front(), + Some(NeovimData::Key(keystroke_text.to_string())), + "operation does not match recorded script. re-record with --features=neovim" + ); + } #[cfg(feature = "neovim")] - pub async fn set_state(&mut self, selection: Selection, text: &str) { + pub async fn set_state(&mut self, marked_text: &str) { + let (text, selection) = parse_state(&marked_text); + let nvim_buffer = self .nvim .get_current_buf() @@ -162,18 +174,41 @@ impl NeovimConnection { if !selection.is_empty() { panic!("Setting neovim state with non empty selection not yet supported"); } - let cursor = selection.head(); + let cursor = selection.start; nvim_window .set_cursor((cursor.row as i64 + 1, cursor.column as i64)) .await .expect("Could not set nvim cursor position"); + + if let Some(NeovimData::Get { mode, state }) = self.data.back() { + if *mode == Some(Mode::Normal) && *state == marked_text { + return; + } + } + self.data.push_back(NeovimData::Put { + state: marked_text.to_string(), + }) } #[cfg(not(feature = "neovim"))] - pub async fn set_state(&mut self, _selection: Selection, _text: &str) {} + pub async fn set_state(&mut self, marked_text: &str) { + if let Some(NeovimData::Get { mode, state: text }) = self.data.front() { + if *mode == Some(Mode::Normal) && *text == marked_text { + return; + } + self.data.pop_front(); + } + assert_eq!( + self.data.pop_front(), + Some(NeovimData::Put { + state: marked_text.to_string() + }), + "operation does not match recorded script. re-record with --features=neovim" + ); + } #[cfg(feature = "neovim")] - pub async fn text(&mut self) -> String { + pub async fn state(&mut self) -> (Option, String, Range) { let nvim_buffer = self .nvim .get_current_buf() @@ -185,22 +220,6 @@ impl NeovimConnection { .expect("Could not get buffer text") .join("\n"); - self.data.push_back(NeovimData::Text(text.clone())); - - text - } - - #[cfg(not(feature = "neovim"))] - pub async fn text(&mut self) -> String { - if let Some(NeovimData::Text(text)) = self.data.pop_front() { - text - } else { - panic!("Invalid test data. Is test deterministic? Try running with '--features neovim' to regenerate"); - } - } - - #[cfg(feature = "neovim")] - pub async fn selection(&mut self) -> Range { let cursor_row: u32 = self .nvim .command_output("echo line('.')") @@ -218,7 +237,30 @@ impl NeovimConnection { .unwrap() - 1; // Neovim columns start at 1 - let (start, end) = if let Some(Mode::Visual { .. }) = self.mode().await { + let nvim_mode_text = self + .nvim + .get_mode() + .await + .expect("Could not get mode") + .into_iter() + .find_map(|(key, value)| { + if key.as_str() == Some("mode") { + Some(value.as_str().unwrap().to_owned()) + } else { + None + } + }) + .expect("Could not find mode value"); + + let mode = match nvim_mode_text.as_ref() { + "i" => Some(Mode::Insert), + "n" => Some(Mode::Normal), + "v" => Some(Mode::Visual { line: false }), + "V" => Some(Mode::Visual { line: true }), + _ => None, + }; + + let (start, end) = if let Some(Mode::Visual { .. }) = mode { self.nvim .input("") .await @@ -243,72 +285,54 @@ impl NeovimConnection { if cursor_row == start_row as u32 - 1 && cursor_col == start_col as u32 { ( - (end_row as u32 - 1, end_col as u32), - (start_row as u32 - 1, start_col as u32), + Point::new(end_row as u32 - 1, end_col as u32), + Point::new(start_row as u32 - 1, start_col as u32), ) } else { ( - (start_row as u32 - 1, start_col as u32), - (end_row as u32 - 1, end_col as u32), + Point::new(start_row as u32 - 1, start_col as u32), + Point::new(end_row as u32 - 1, end_col as u32), ) } } else { - ((cursor_row, cursor_col), (cursor_row, cursor_col)) + ( + Point::new(cursor_row, cursor_col), + Point::new(cursor_row, cursor_col), + ) }; - self.data.push_back(NeovimData::Selection { start, end }); + let state = NeovimData::Get { + mode, + state: encode_range(&text, start..end), + }; + + if self.data.back() != Some(&state) { + self.data.push_back(state.clone()); + } - Point::new(start.0, start.1)..Point::new(end.0, end.1) + (mode, text, start..end) } #[cfg(not(feature = "neovim"))] - pub async fn selection(&mut self) -> Range { - // Selection code fetches the mode. This emulates that. - let _mode = self.mode().await; - if let Some(NeovimData::Selection { start, end }) = self.data.pop_front() { - Point::new(start.0, start.1)..Point::new(end.0, end.1) + pub async fn state(&mut self) -> (Option, String, Range) { + if let Some(NeovimData::Get { state: text, mode }) = self.data.front() { + let (text, range) = parse_state(text); + (*mode, text, range) } else { - panic!("Invalid test data. Is test deterministic? Try running with '--features neovim' to regenerate"); + panic!("operation does not match recorded script. re-record with --features=neovim"); } } - #[cfg(feature = "neovim")] - pub async fn mode(&mut self) -> Option { - let nvim_mode_text = self - .nvim - .get_mode() - .await - .expect("Could not get mode") - .into_iter() - .find_map(|(key, value)| { - if key.as_str() == Some("mode") { - Some(value.as_str().unwrap().to_owned()) - } else { - None - } - }) - .expect("Could not find mode value"); - - let mode = match nvim_mode_text.as_ref() { - "i" => Some(Mode::Insert), - "n" => Some(Mode::Normal), - "v" => Some(Mode::Visual { line: false }), - "V" => Some(Mode::Visual { line: true }), - _ => None, - }; - - self.data.push_back(NeovimData::Mode(mode.clone())); - - mode + pub async fn selection(&mut self) -> Range { + self.state().await.2 } - #[cfg(not(feature = "neovim"))] pub async fn mode(&mut self) -> Option { - if let Some(NeovimData::Mode(mode)) = self.data.pop_front() { - mode - } else { - panic!("Invalid test data. Is test deterministic? Try running with '--features neovim' to regenerate"); - } + self.state().await.0 + } + + pub async fn text(&mut self) -> String { + self.state().await.1 } fn test_data_path(test_case_id: &str) -> PathBuf { @@ -325,8 +349,27 @@ impl NeovimConnection { "Could not read test data. Is it generated? Try running test with '--features neovim'", ); - serde_json::from_str(&json) - .expect("Test data corrupted. Try regenerating it with '--features neovim'") + let mut result = VecDeque::new(); + for line in json.lines() { + result.push_back( + serde_json::from_str(line) + .expect("invalid test data. regenerate it with '--features neovim'"), + ); + } + result + } + + #[cfg(feature = "neovim")] + fn write_test_data(test_case_id: &str, data: &VecDeque) { + let path = Self::test_data_path(test_case_id); + let mut json = Vec::new(); + for entry in data { + serde_json::to_writer(&mut json, entry).unwrap(); + json.push(b'\n'); + } + std::fs::create_dir_all(path.parent().unwrap()) + .expect("could not create test data directory"); + std::fs::write(path, json).expect("could not write out test data"); } } @@ -349,11 +392,7 @@ impl DerefMut for NeovimConnection { #[cfg(feature = "neovim")] impl Drop for NeovimConnection { fn drop(&mut self) { - let path = Self::test_data_path(&self.test_case_id); - std::fs::create_dir_all(path.parent().unwrap()) - .expect("Could not create test data directory"); - let json = serde_json::to_string(&self.data).expect("Could not serialize test data"); - std::fs::write(path, json).expect("Could not write out test data"); + Self::write_test_data(&self.test_case_id, &self.data); } } @@ -383,3 +422,52 @@ impl Handler for NvimHandler { ) { } } + +fn parse_state(marked_text: &str) -> (String, Range) { + let (text, ranges) = util::test::marked_text_ranges(marked_text, true); + let byte_range = ranges[0].clone(); + let mut point_range = Point::zero()..Point::zero(); + let mut ix = 0; + let mut position = Point::zero(); + for c in text.chars().chain(['\0']) { + if ix == byte_range.start { + point_range.start = position; + } + if ix == byte_range.end { + point_range.end = position; + } + let len_utf8 = c.len_utf8(); + ix += len_utf8; + if c == '\n' { + position.row += 1; + position.column = 0; + } else { + position.column += len_utf8 as u32; + } + } + (text, point_range) +} + +#[cfg(feature = "neovim")] +fn encode_range(text: &str, range: Range) -> String { + let mut byte_range = 0..0; + let mut ix = 0; + let mut position = Point::zero(); + for c in text.chars().chain(['\0']) { + if position == range.start { + byte_range.start = ix; + } + if position == range.end { + byte_range.end = ix; + } + let len_utf8 = c.len_utf8(); + ix += len_utf8; + if c == '\n' { + position.row += 1; + position.column = 0; + } else { + position.column += len_utf8 as u32; + } + } + util::test::generate_marked_text(text, &[byte_range], true) +} diff --git a/crates/vim/test_data/neovim_backed_test_context_works.json b/crates/vim/test_data/neovim_backed_test_context_works.json index 807c9010e894d43c47b62277de177b48bd8f4268..3ed9f40f88a8dfb14a551fee6d6a236b10f89f64 100644 --- a/crates/vim/test_data/neovim_backed_test_context_works.json +++ b/crates/vim/test_data/neovim_backed_test_context_works.json @@ -1 +1,3 @@ -[{"Text":""},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"This is a test"},{"Mode":"Normal"},{"Selection":{"start":[0,13],"end":[0,13]}},{"Mode":"Normal"}] \ No newline at end of file +{"Get":{"state":"ˇ","mode":"Normal"}} +{"Put":{"state":"This is a tesˇt"}} +{"Get":{"state":"This is a tesˇt","mode":"Normal"}} diff --git a/crates/vim/test_data/test_a.json b/crates/vim/test_data/test_a.json index 32ea8ac6a6fca1bf41c2c5de3b5d49e4280dabb3..8094974f982c97bda4e9f2ea9ba2373788655b9d 100644 --- a/crates/vim/test_data/test_a.json +++ b/crates/vim/test_data/test_a.json @@ -1 +1,6 @@ -[{"Text":"The quick"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"The quick"},{"Mode":"Insert"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"The qˇuick"}} +{"Key":"a"} +{"Get":{"state":"The quˇick","mode":"Insert"}} +{"Put":{"state":"The quicˇk"}} +{"Key":"a"} +{"Get":{"state":"The quickˇ","mode":"Insert"}} diff --git a/crates/vim/test_data/test_b.json b/crates/vim/test_data/test_b.json index 635edf536b85148c51b484af701e153006b2a7db..4324f9610d284ffb63e78cc0ad50b5b93829477f 100644 --- a/crates/vim/test_data/test_b.json +++ b/crates/vim/test_data/test_b.json @@ -1 +1,54 @@ -[{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[3,10],"end":[3,10]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[3,10],"end":[3,10]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"b"} +{"Get":{"state":"ˇThe quick-brown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The ˇquick-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"b"} +{"Get":{"state":"ˇThe quick-brown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quickˇ-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"b"} +{"Get":{"state":"The ˇquick-brown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-ˇbrown\n\n\nfox_jumps over\nthe"}} +{"Key":"b"} +{"Get":{"state":"The quickˇ-brown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-brown\nˇ\n\nfox_jumps over\nthe"}} +{"Key":"b"} +{"Get":{"state":"The quick-ˇbrown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-brown\n\nˇ\nfox_jumps over\nthe"}} +{"Key":"b"} +{"Get":{"state":"The quick-brown\nˇ\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-brown\n\n\nˇfox_jumps over\nthe"}} +{"Key":"b"} +{"Get":{"state":"The quick-brown\n\nˇ\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-brown\n\n\nfox_jumps ˇover\nthe"}} +{"Key":"b"} +{"Get":{"state":"The quick-brown\n\n\nˇfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-brown\n\n\nfox_jumps over\nˇthe"}} +{"Key":"b"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps ˇover\nthe","mode":"Normal"}} +{"Put":{"state":"ˇThe quick-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"shift-b"} +{"Get":{"state":"ˇThe quick-brown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The ˇquick-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"shift-b"} +{"Get":{"state":"ˇThe quick-brown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quickˇ-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"shift-b"} +{"Get":{"state":"The ˇquick-brown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-ˇbrown\n\n\nfox_jumps over\nthe"}} +{"Key":"shift-b"} +{"Get":{"state":"The ˇquick-brown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-brown\nˇ\n\nfox_jumps over\nthe"}} +{"Key":"shift-b"} +{"Get":{"state":"The ˇquick-brown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-brown\n\nˇ\nfox_jumps over\nthe"}} +{"Key":"shift-b"} +{"Get":{"state":"The quick-brown\nˇ\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-brown\n\n\nˇfox_jumps over\nthe"}} +{"Key":"shift-b"} +{"Get":{"state":"The quick-brown\n\nˇ\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-brown\n\n\nfox_jumps ˇover\nthe"}} +{"Key":"shift-b"} +{"Get":{"state":"The quick-brown\n\n\nˇfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-brown\n\n\nfox_jumps over\nˇthe"}} +{"Key":"shift-b"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps ˇover\nthe","mode":"Normal"}} diff --git a/crates/vim/test_data/test_backspace.json b/crates/vim/test_data/test_backspace.json index d002dfa718ced0aafb6ec330ff5e84adf112b5b3..b11a2562dbc2d8b7a3736ea9813f4e7bd6dbb6f1 100644 --- a/crates/vim/test_data/test_backspace.json +++ b/crates/vim/test_data/test_backspace.json @@ -1 +1,9 @@ -[{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick\nbrown"}} +{"Key":"backspace"} +{"Get":{"state":"ˇThe quick\nbrown","mode":"Normal"}} +{"Put":{"state":"The qˇuick\nbrown"}} +{"Key":"backspace"} +{"Get":{"state":"The ˇquick\nbrown","mode":"Normal"}} +{"Put":{"state":"The quick\nˇbrown"}} +{"Key":"backspace"} +{"Get":{"state":"The quicˇk\nbrown","mode":"Normal"}} diff --git a/crates/vim/test_data/test_capital_f_and_capital_t.json b/crates/vim/test_data/test_capital_f_and_capital_t.json index 4c7f760021ba3718e640f516ba583fde2f3f4b96..8ef45ec623da86056f238ddf148021fb9c857172 100644 --- a/crates/vim/test_data/test_capital_f_and_capital_t.json +++ b/crates/vim/test_data/test_capital_f_and_capital_t.json @@ -1 +1,570 @@ -[{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,5],"end":[1,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,5],"end":[1,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,5],"end":[1,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,11],"end":[1,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,5],"end":[1,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,7],"end":[1,7]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,5],"end":[1,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,7],"end":[1,7]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,5],"end":[1,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,5],"end":[1,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,7],"end":[1,7]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,5],"end":[1,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,7],"end":[1,7]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,5],"end":[1,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n"}} +{"Key":"1"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n","mode":"Normal"}} +{"Put":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n"}} +{"Key":"1"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n","mode":"Normal"}} +{"Put":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n"}} +{"Key":"2"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n","mode":"Normal"}} +{"Put":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n"}} +{"Key":"2"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n","mode":"Normal"}} +{"Put":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n"}} +{"Key":"3"} +{"Key":"shift-f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n","mode":"Normal"}} +{"Put":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n"}} +{"Key":"3"} +{"Key":"shift-t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n","mode":"Normal"}} diff --git a/crates/vim/test_data/test_cc.json b/crates/vim/test_data/test_cc.json index 67492d827e4985322c6fd07c1ecc030b23e83594..d4b4a499bbb0cfef4fabb0c57b6956b975d873d5 100644 --- a/crates/vim/test_data/test_cc.json +++ b/crates/vim/test_data/test_cc.json @@ -1 +1,24 @@ -[{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nbrown fox\njumps over"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick\n\njumps over"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick\nbrown fox\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick\n\nbrown fox"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"ˇ"}} +{"Key":"c"} +{"Key":"c"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Put":{"state":"The ˇquick"}} +{"Key":"c"} +{"Key":"c"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Put":{"state":"The quˇick\nbrown fox\njumps over"}} +{"Key":"c"} +{"Key":"c"} +{"Get":{"state":"ˇ\nbrown fox\njumps over","mode":"Insert"}} +{"Put":{"state":"The quick\nbrown ˇfox\njumps over"}} +{"Key":"c"} +{"Key":"c"} +{"Get":{"state":"The quick\nˇ\njumps over","mode":"Insert"}} +{"Put":{"state":"The quick\nbrown fox\njumps ˇover"}} +{"Key":"c"} +{"Key":"c"} +{"Get":{"state":"The quick\nbrown fox\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick\nˇ\nbrown fox"}} +{"Key":"c"} +{"Key":"c"} +{"Get":{"state":"The quick\nˇ\nbrown fox","mode":"Insert"}} diff --git a/crates/vim/test_data/test_change_0.json b/crates/vim/test_data/test_change_0.json index fdc7632f01093e10a73d7fab1e700200628e6206..90668f4a17da9d0d8d5dc9e677f29568ed6c0f83 100644 --- a/crates/vim/test_data/test_change_0.json +++ b/crates/vim/test_data/test_change_0.json @@ -1 +1,8 @@ -[{"Text":"uick\nbrown fox"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick\n\nbrown fox"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"The qˇuick\nbrown fox"}} +{"Key":"c"} +{"Key":"0"} +{"Get":{"state":"ˇuick\nbrown fox","mode":"Insert"}} +{"Put":{"state":"The quick\nˇ\nbrown fox"}} +{"Key":"c"} +{"Key":"0"} +{"Get":{"state":"The quick\nˇ\nbrown fox","mode":"Insert"}} diff --git a/crates/vim/test_data/test_change_b.json b/crates/vim/test_data/test_change_b.json index b1dadfdd6484aaf7302ff924f5a5e252607f2b8f..d43cc04c45ea8ac88af91ac24d5218469b6326de 100644 --- a/crates/vim/test_data/test_change_b.json +++ b/crates/vim/test_data/test_change_b.json @@ -1 +1,24 @@ -[{"Text":"st Test"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"test"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"Test1 test3"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Test \ntest"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Test \n\ntest"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Test test"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"Teˇst Test"}} +{"Key":"c"} +{"Key":"b"} +{"Get":{"state":"ˇst Test","mode":"Insert"}} +{"Put":{"state":"Test ˇtest"}} +{"Key":"c"} +{"Key":"b"} +{"Get":{"state":"ˇtest","mode":"Insert"}} +{"Put":{"state":"Test1 test2 ˇtest3"}} +{"Key":"c"} +{"Key":"b"} +{"Get":{"state":"Test1 ˇtest3","mode":"Insert"}} +{"Put":{"state":"Test test\nˇtest"}} +{"Key":"c"} +{"Key":"b"} +{"Get":{"state":"Test ˇ\ntest","mode":"Insert"}} +{"Put":{"state":"Test test\nˇ\ntest"}} +{"Key":"c"} +{"Key":"b"} +{"Get":{"state":"Test ˇ\n\ntest","mode":"Insert"}} +{"Put":{"state":"Test test-test ˇtest"}} +{"Key":"c"} +{"Key":"shift-b"} +{"Get":{"state":"Test ˇtest","mode":"Insert"}} diff --git a/crates/vim/test_data/test_change_backspace.json b/crates/vim/test_data/test_change_backspace.json index f2e2f66b35cfb183fb1c5dcef0fc78ecd85a9c14..508500163b3302f4943f8a5ef101676c243a7256 100644 --- a/crates/vim/test_data/test_change_backspace.json +++ b/crates/vim/test_data/test_change_backspace.json @@ -1 +1,16 @@ -[{"Text":"Tst"},{"Mode":"Insert"},{"Selection":{"start":[0,1],"end":[0,1]}},{"Mode":"Insert"},{"Text":"est"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"Test"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"Testtest"},{"Mode":"Insert"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"Teˇst"}} +{"Key":"c"} +{"Key":"backspace"} +{"Get":{"state":"Tˇst","mode":"Insert"}} +{"Put":{"state":"Tˇest"}} +{"Key":"c"} +{"Key":"backspace"} +{"Get":{"state":"ˇest","mode":"Insert"}} +{"Put":{"state":"ˇTest"}} +{"Key":"c"} +{"Key":"backspace"} +{"Get":{"state":"ˇTest","mode":"Insert"}} +{"Put":{"state":"Test\nˇtest"}} +{"Key":"c"} +{"Key":"backspace"} +{"Get":{"state":"Testˇtest","mode":"Insert"}} diff --git a/crates/vim/test_data/test_change_e.json b/crates/vim/test_data/test_change_e.json index bd91ec3d63707644c95b9f77cfba6b3da712f1a0..fc9f91fe0220a4b232006153d8e8af21b007075c 100644 --- a/crates/vim/test_data/test_change_e.json +++ b/crates/vim/test_data/test_change_e.json @@ -1 +1,24 @@ -[{"Text":"Te Test"},{"Mode":"Insert"},{"Selection":{"start":[0,2],"end":[0,2]}},{"Mode":"Insert"},{"Text":"T test"},{"Mode":"Insert"},{"Selection":{"start":[0,1],"end":[0,1]}},{"Mode":"Insert"},{"Text":"Test te\ntest"},{"Mode":"Insert"},{"Selection":{"start":[0,7],"end":[0,7]}},{"Mode":"Insert"},{"Text":"Test tes"},{"Mode":"Insert"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Insert"},{"Text":"Test test\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"Test te test"},{"Mode":"Insert"},{"Selection":{"start":[0,7],"end":[0,7]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"Teˇst Test"}} +{"Key":"c"} +{"Key":"e"} +{"Get":{"state":"Teˇ Test","mode":"Insert"}} +{"Put":{"state":"Tˇest test"}} +{"Key":"c"} +{"Key":"e"} +{"Get":{"state":"Tˇ test","mode":"Insert"}} +{"Put":{"state":"Test teˇst\ntest"}} +{"Key":"c"} +{"Key":"e"} +{"Get":{"state":"Test teˇ\ntest","mode":"Insert"}} +{"Put":{"state":"Test tesˇt\ntest"}} +{"Key":"c"} +{"Key":"e"} +{"Get":{"state":"Test tesˇ","mode":"Insert"}} +{"Put":{"state":"Test test\nˇ\ntest"}} +{"Key":"c"} +{"Key":"e"} +{"Get":{"state":"Test test\nˇ","mode":"Insert"}} +{"Put":{"state":"Test teˇst-test test"}} +{"Key":"c"} +{"Key":"shift-e"} +{"Get":{"state":"Test teˇ test","mode":"Insert"}} diff --git a/crates/vim/test_data/test_change_end_of_document.json b/crates/vim/test_data/test_change_end_of_document.json index 8a0cc840be8733d485286b29a33e582906617cef..a3f09e4453f7d414893cc80f394c01dc80a7126e 100644 --- a/crates/vim/test_data/test_change_end_of_document.json +++ b/crates/vim/test_data/test_change_end_of_document.json @@ -1 +1,16 @@ -[{"Text":"The quick\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick\nbrown fox\njumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"The quick\nbrown fox\njumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"The quick\nbrownˇ fox\njumps over\nthe lazy"}} +{"Key":"c"} +{"Key":"shift-g"} +{"Get":{"state":"The quick\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick\nbrownˇ fox\njumps over\nthe lazy"}} +{"Key":"c"} +{"Key":"shift-g"} +{"Get":{"state":"The quick\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick\nbrown fox\njumps over\nthe lˇazy"}} +{"Key":"c"} +{"Key":"shift-g"} +{"Get":{"state":"The quick\nbrown fox\njumps over\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick\nbrown fox\njumps over\nˇ"}} +{"Key":"c"} +{"Key":"shift-g"} +{"Get":{"state":"The quick\nbrown fox\njumps over\nˇ","mode":"Insert"}} diff --git a/crates/vim/test_data/test_change_end_of_line.json b/crates/vim/test_data/test_change_end_of_line.json index 6d6f45a3a26cbbf0cb8a0b9c8677261b8805ed92..44766df85ea90a33a6b7684530ba323ae7c20293 100644 --- a/crates/vim/test_data/test_change_end_of_line.json +++ b/crates/vim/test_data/test_change_end_of_line.json @@ -1 +1,8 @@ -[{"Text":"The q\nbrown fox"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"The quick\n\nbrown fox"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"The qˇuick\nbrown fox"}} +{"Key":"c"} +{"Key":"$"} +{"Get":{"state":"The qˇ\nbrown fox","mode":"Insert"}} +{"Put":{"state":"The quick\nˇ\nbrown fox"}} +{"Key":"c"} +{"Key":"$"} +{"Get":{"state":"The quick\nˇ\nbrown fox","mode":"Insert"}} diff --git a/crates/vim/test_data/test_change_gg.json b/crates/vim/test_data/test_change_gg.json index b8e250788c3fa8cf0d092de469bf0c7255d3e538..f4271f712010b1cd5102db2a5059f92cb1167535 100644 --- a/crates/vim/test_data/test_change_gg.json +++ b/crates/vim/test_data/test_change_gg.json @@ -1 +1,20 @@ -[{"Text":"\njumps over\nthe lazy"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nbrown fox\njumps over\nthe lazy"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nbrown fox\njumps over\nthe lazy"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"The quick\nbrownˇ fox\njumps over\nthe lazy"}} +{"Key":"c"} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"ˇ\njumps over\nthe lazy","mode":"Insert"}} +{"Put":{"state":"The quick\nbrown fox\njumps over\nthe lˇazy"}} +{"Key":"c"} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Put":{"state":"The qˇuick\nbrown fox\njumps over\nthe lazy"}} +{"Key":"c"} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"ˇ\nbrown fox\njumps over\nthe lazy","mode":"Insert"}} +{"Put":{"state":"ˇ\nbrown fox\njumps over\nthe lazy"}} +{"Key":"c"} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"ˇ\nbrown fox\njumps over\nthe lazy","mode":"Insert"}} diff --git a/crates/vim/test_data/test_change_h.json b/crates/vim/test_data/test_change_h.json index 75da235bd286939766335d8d7efd11da30022f36..6acfb5d0807dd5f9031d753594a223fd9594dbc9 100644 --- a/crates/vim/test_data/test_change_h.json +++ b/crates/vim/test_data/test_change_h.json @@ -1 +1,16 @@ -[{"Text":"Tst"},{"Mode":"Insert"},{"Selection":{"start":[0,1],"end":[0,1]}},{"Mode":"Insert"},{"Text":"est"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"Test"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"Test\ntest"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"Teˇst"}} +{"Key":"c"} +{"Key":"h"} +{"Get":{"state":"Tˇst","mode":"Insert"}} +{"Put":{"state":"Tˇest"}} +{"Key":"c"} +{"Key":"h"} +{"Get":{"state":"ˇest","mode":"Insert"}} +{"Put":{"state":"ˇTest"}} +{"Key":"c"} +{"Key":"h"} +{"Get":{"state":"ˇTest","mode":"Insert"}} +{"Put":{"state":"Test\nˇtest"}} +{"Key":"c"} +{"Key":"h"} +{"Get":{"state":"Test\nˇtest","mode":"Insert"}} diff --git a/crates/vim/test_data/test_change_j.json b/crates/vim/test_data/test_change_j.json index a8ce6bbc859bd939b7437a6175a3d886e22a6956..827fe18c0dbaf0dc15e55a4036d8961b625bc9b1 100644 --- a/crates/vim/test_data/test_change_j.json +++ b/crates/vim/test_data/test_change_j.json @@ -1 +1,16 @@ -[{"Text":"The quick\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick\nbrown fox\njumps over"},{"Mode":"Normal"},{"Selection":{"start":[2,6],"end":[2,6]}},{"Mode":"Normal"},{"Text":"\njumps over"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick\nbrown fox\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The quick\nbrown ˇfox\njumps over"}} +{"Key":"c"} +{"Key":"j"} +{"Get":{"state":"The quick\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick\nbrown fox\njumps ˇover"}} +{"Key":"c"} +{"Key":"j"} +{"Get":{"state":"The quick\nbrown fox\njumps ˇover","mode":"Normal"}} +{"Put":{"state":"The qˇuick\nbrown fox\njumps over"}} +{"Key":"c"} +{"Key":"j"} +{"Get":{"state":"ˇ\njumps over","mode":"Insert"}} +{"Put":{"state":"The quick\nbrown fox\nˇ"}} +{"Key":"c"} +{"Key":"j"} +{"Get":{"state":"The quick\nbrown fox\nˇ","mode":"Normal"}} diff --git a/crates/vim/test_data/test_change_k.json b/crates/vim/test_data/test_change_k.json index e37a013ec3fdcafa2beb7cf3d028d2a4911e7d86..4f89a82b80a6149f97122f21f11435598ca3a7fb 100644 --- a/crates/vim/test_data/test_change_k.json +++ b/crates/vim/test_data/test_change_k.json @@ -1 +1,16 @@ -[{"Text":"\njumps over"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick\nbrown fox\njumps over"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"\nbrown fox\njumps over"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The quick\nbrown ˇfox\njumps over"}} +{"Key":"c"} +{"Key":"k"} +{"Get":{"state":"ˇ\njumps over","mode":"Insert"}} +{"Put":{"state":"The quick\nbrown fox\njumps ˇover"}} +{"Key":"c"} +{"Key":"k"} +{"Get":{"state":"The quick\nˇ","mode":"Insert"}} +{"Put":{"state":"The qˇuick\nbrown fox\njumps over"}} +{"Key":"c"} +{"Key":"k"} +{"Get":{"state":"The qˇuick\nbrown fox\njumps over","mode":"Normal"}} +{"Put":{"state":"ˇ\nbrown fox\njumps over"}} +{"Key":"c"} +{"Key":"k"} +{"Get":{"state":"ˇ\nbrown fox\njumps over","mode":"Normal"}} diff --git a/crates/vim/test_data/test_change_l.json b/crates/vim/test_data/test_change_l.json index a280506d56c92d9fb677d974dfbf3bdab6710ea6..378c5dc7ca63a109239ccf78783f5f26d48ad680 100644 --- a/crates/vim/test_data/test_change_l.json +++ b/crates/vim/test_data/test_change_l.json @@ -1 +1,8 @@ -[{"Text":"Tet"},{"Mode":"Insert"},{"Selection":{"start":[0,2],"end":[0,2]}},{"Mode":"Insert"},{"Text":"Tes"},{"Mode":"Insert"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"Teˇst"}} +{"Key":"c"} +{"Key":"l"} +{"Get":{"state":"Teˇt","mode":"Insert"}} +{"Put":{"state":"Tesˇt"}} +{"Key":"c"} +{"Key":"l"} +{"Get":{"state":"Tesˇ","mode":"Insert"}} diff --git a/crates/vim/test_data/test_change_sentence_object.json b/crates/vim/test_data/test_change_sentence_object.json index 7827bc8a28b0a855257e73ade93687147a9aad70..11f99c8244fd403587802192bf05142e1dfa511b 100644 --- a/crates/vim/test_data/test_change_sentence_object.json +++ b/crates/vim/test_data/test_change_sentence_object.json @@ -1 +1,270 @@ -[{"Text":" Fox Jumps! Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" Fox Jumps! Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" Fox Jumps! Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick brown?Fox Jumps! Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,16],"end":[0,16]}},{"Mode":"Insert"},{"Text":"The quick brown? Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,17],"end":[0,17]}},{"Mode":"Insert"},{"Text":"The quick brown? Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,17],"end":[0,17]}},{"Mode":"Insert"},{"Text":"The quick brown? Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,17],"end":[0,17]}},{"Mode":"Insert"},{"Text":"The quick brown? Fox Jumps!Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,27],"end":[0,27]}},{"Mode":"Insert"},{"Text":"The quick brown? Fox Jumps! "},{"Mode":"Insert"},{"Selection":{"start":[0,28],"end":[0,28]}},{"Mode":"Insert"},{"Text":"The quick brown? Fox Jumps! "},{"Mode":"Insert"},{"Selection":{"start":[0,28],"end":[0,28]}},{"Mode":"Insert"},{"Text":"The quick brown? Fox Jumps! "},{"Mode":"Insert"},{"Selection":{"start":[0,28],"end":[0,28]}},{"Mode":"Insert"},{"Text":" The quick \nbrown fox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" The quick \nbrown fox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" The quick \nbrown fox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" The quick \nbrown fox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" The quick \nbrown fox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog.The quick \nbrown fox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog. \n"},{"Mode":"Insert"},{"Selection":{"start":[2,14],"end":[2,14]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog. \n"},{"Mode":"Insert"},{"Selection":{"start":[2,14],"end":[2,14]}},{"Mode":"Insert"},{"Text":" Brown fox jumps. "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" Brown fox jumps. "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" Brown fox jumps. "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" Brown fox jumps. "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" Brown fox jumps. "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" Brown fox jumps. "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick brown.)]'\" "},{"Mode":"Insert"},{"Selection":{"start":[0,21],"end":[0,21]}},{"Mode":"Insert"},{"Text":"The quick brown.)]'\" "},{"Mode":"Insert"},{"Selection":{"start":[0,21],"end":[0,21]}},{"Mode":"Insert"},{"Text":"The quick brown.)]'\" Brown fox jumps."},{"Mode":"Insert"},{"Selection":{"start":[0,37],"end":[0,37]}},{"Mode":"Insert"},{"Text":"Fox Jumps! Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"Fox Jumps! Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"Fox Jumps! Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick brown? Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,17],"end":[0,17]}},{"Mode":"Insert"},{"Text":"The quick brown? Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,17],"end":[0,17]}},{"Mode":"Insert"},{"Text":"The quick brown? Over the lazy."},{"Mode":"Insert"},{"Selection":{"start":[0,17],"end":[0,17]}},{"Mode":"Insert"},{"Text":"The quick brown? Fox Jumps!"},{"Mode":"Insert"},{"Selection":{"start":[0,27],"end":[0,27]}},{"Mode":"Insert"},{"Text":"The quick brown? Fox Jumps!"},{"Mode":"Insert"},{"Selection":{"start":[0,27],"end":[0,27]}},{"Mode":"Insert"},{"Text":"The quick brown? Fox Jumps!"},{"Mode":"Insert"},{"Selection":{"start":[0,27],"end":[0,27]}},{"Mode":"Insert"},{"Text":"The quick brown? Fox Jumps!"},{"Mode":"Insert"},{"Selection":{"start":[0,27],"end":[0,27]}},{"Mode":"Insert"},{"Text":"The quick \nbrown fox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick \nbrown fox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick \nbrown fox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick \nbrown fox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick \nbrown fox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog.\n"},{"Mode":"Insert"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog.\n"},{"Mode":"Insert"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog.\n"},{"Mode":"Insert"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Insert"},{"Text":"Brown fox jumps. "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"Brown fox jumps. "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"Brown fox jumps. "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"Brown fox jumps. "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"Brown fox jumps. "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"Brown fox jumps. "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick brown.)]'\" "},{"Mode":"Insert"},{"Selection":{"start":[0,21],"end":[0,21]}},{"Mode":"Insert"},{"Text":"The quick brown.)]'\" "},{"Mode":"Insert"},{"Selection":{"start":[0,21],"end":[0,21]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick brown? Fox Jumps! Over the lazy."}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Fox Jumps! Over the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick ˇbrown? Fox Jumps! Over the lazy."}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Fox Jumps! Over the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick brownˇ? Fox Jumps! Over the lazy."}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Fox Jumps! Over the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick brown?ˇ Fox Jumps! Over the lazy."}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown?ˇFox Jumps! Over the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick brown? ˇFox Jumps! Over the lazy."}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? ˇ Over the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick brown? Fox Jˇumps! Over the lazy."}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? ˇ Over the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick brown? Fox Jumpsˇ! Over the lazy."}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? ˇ Over the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick brown? Fox Jumps!ˇ Over the lazy."}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumps!ˇOver the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick brown? Fox Jumps! Ovˇer the lazy."}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumps! ˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown? Fox Jumps! Over theˇ lazy."}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumps! ˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown? Fox Jumps! Over the lazyˇ."}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumps! ˇ","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown \nfox jumps over\nthe lazy dog. The quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ The quick \nbrown fox jumps over\n","mode":"Insert"}} +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog. The quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ The quick \nbrown fox jumps over\n","mode":"Insert"}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog. The quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ The quick \nbrown fox jumps over\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy doˇg. The quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ The quick \nbrown fox jumps over\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ. The quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ The quick \nbrown fox jumps over\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog.ˇ The quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog.ˇThe quick \nbrown fox jumps over\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog. ˇThe quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog. ˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog. The quick ˇ\nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog. ˇ\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown.)]'\" Brown fox jumps. "}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Brown fox jumps. ","mode":"Insert"}} +{"Put":{"state":"The ˇquick brown.)]'\" Brown fox jumps. "}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Brown fox jumps. ","mode":"Insert"}} +{"Put":{"state":"The quick brownˇ.)]'\" Brown fox jumps. "}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Brown fox jumps. ","mode":"Insert"}} +{"Put":{"state":"The quick brown.)ˇ]'\" Brown fox jumps. "}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Brown fox jumps. ","mode":"Insert"}} +{"Put":{"state":"The quick brown.)]ˇ'\" Brown fox jumps. "}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Brown fox jumps. ","mode":"Insert"}} +{"Put":{"state":"The quick brown.)]'ˇ\" Brown fox jumps. "}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Brown fox jumps. ","mode":"Insert"}} +{"Put":{"state":"The quick brown.)]'\" Brown ˇfox jumps. "}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown.)]'\" ˇ ","mode":"Insert"}} +{"Put":{"state":"The quick brown.)]'\" Brown fox jumpsˇ. "}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown.)]'\" ˇ ","mode":"Insert"}} +{"Put":{"state":"The quick brown.)]'\" Brown fox jumps.ˇ "}} +{"Key":"c"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown.)]'\" Brown fox jumps.ˇ","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown? Fox Jumps! Over the lazy."}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇFox Jumps! Over the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick ˇbrown? Fox Jumps! Over the lazy."}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇFox Jumps! Over the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick brownˇ? Fox Jumps! Over the lazy."}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇFox Jumps! Over the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick brown? ˇFox Jumps! Over the lazy."}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? ˇOver the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick brown? Fox Jˇumps! Over the lazy."}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? ˇOver the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick brown? Fox Jumpsˇ! Over the lazy."}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? ˇOver the lazy.","mode":"Insert"}} +{"Put":{"state":"The quick brown? Fox Jumps!ˇ Over the lazy."}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumps!ˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown? Fox Jumps! Ovˇer the lazy."}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumps!ˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown? Fox Jumps! Over theˇ lazy."}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumps!ˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown? Fox Jumps! Over the lazyˇ."}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumps!ˇ","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown \nfox jumps over\nthe lazy dog. The quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇThe quick \nbrown fox jumps over\n","mode":"Insert"}} +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog. The quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇThe quick \nbrown fox jumps over\n","mode":"Insert"}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog. The quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇThe quick \nbrown fox jumps over\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy doˇg. The quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇThe quick \nbrown fox jumps over\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ. The quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇThe quick \nbrown fox jumps over\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog.ˇ The quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog.ˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog. ˇThe quick \nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog.ˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog. The quick ˇ\nbrown fox jumps over\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog.ˇ\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown.)]'\" Brown fox jumps. "}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇBrown fox jumps. ","mode":"Insert"}} +{"Put":{"state":"The ˇquick brown.)]'\" Brown fox jumps. "}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇBrown fox jumps. ","mode":"Insert"}} +{"Put":{"state":"The quick brownˇ.)]'\" Brown fox jumps. "}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇBrown fox jumps. ","mode":"Insert"}} +{"Put":{"state":"The quick brown.)ˇ]'\" Brown fox jumps. "}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇBrown fox jumps. ","mode":"Insert"}} +{"Put":{"state":"The quick brown.)]ˇ'\" Brown fox jumps. "}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇBrown fox jumps. ","mode":"Insert"}} +{"Put":{"state":"The quick brown.)]'ˇ\" Brown fox jumps. "}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇBrown fox jumps. ","mode":"Insert"}} +{"Put":{"state":"The quick brown.)]'\" Brown ˇfox jumps. "}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown.)]'\" ˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown.)]'\" Brown fox jumpsˇ. "}} +{"Key":"c"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown.)]'\" ˇ","mode":"Insert"}} diff --git a/crates/vim/test_data/test_change_surrounding_character_objects.json b/crates/vim/test_data/test_change_surrounding_character_objects.json index 452b0fde10e5b1c6ad1a91003715f0726c2d4737..a88f84cf4b8619e19a97c2f1840bc27298fe255f 100644 --- a/crates/vim/test_data/test_change_surrounding_character_objects.json +++ b/crates/vim/test_data/test_change_surrounding_character_objects.json @@ -1 +1,1020 @@ -[{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th)e qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th)e qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th)e qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th)e qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th)e qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th)e qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th]e qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th]e qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th]e qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th]e qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th]e qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th]e qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Insert"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th}e qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th}e qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th}e qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th}e qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th}e qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th}e qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Insert"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Insert"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Insert"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)ˇe ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ˇ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()quˇi(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ˇck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck broˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)ˇfox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox juˇmps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇ(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇer\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe ˇlazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy dˇ)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)ˇe ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ˇ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()quˇi(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ˇck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck broˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)ˇfox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox juˇmps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇ(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇer\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe ˇlazy d)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy dˇ)o(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg"}} +{"Key":"c"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)ˇe ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ˇ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()quˇi(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ˇck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck broˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)ˇfox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox juˇmps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇ(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇer\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe ˇlazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy dˇ)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)ˇe ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ˇ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()quˇi(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ˇck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck broˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)ˇfox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox juˇmps ov(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇ(er\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇer\nthe lazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe ˇlazy d)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy dˇ)o(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Insert"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg"}} +{"Key":"c"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]ˇe []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e ˇ[]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []quˇi[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ˇck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck broˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]ˇfox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox juˇmps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇ[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇer\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe ˇlazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy dˇ]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]ˇe []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e ˇ[]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []quˇi[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ˇck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck broˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]ˇfox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox juˇmps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇ[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇer\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe ˇlazy d]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy dˇ]o[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]ˇe []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e ˇ[]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []quˇi[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ˇck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck broˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]ˇfox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox juˇmps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇ[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇer\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe ˇlazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy dˇ]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]ˇe []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e ˇ[]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []quˇi[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ˇck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck broˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]ˇfox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox juˇmps ov[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇ[er\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇer\nthe lazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe ˇlazy d]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy dˇ]o[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Insert"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}ˇe {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e ˇ{}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}quˇi{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ˇck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck broˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}ˇfox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox juˇmps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇ{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇer\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe ˇlazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy dˇ}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}ˇe {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e ˇ{}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}quˇi{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ˇck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck broˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}ˇfox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox juˇmps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇ{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇer\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe ˇlazy d}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy dˇ}o{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}ˇe {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e ˇ{}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}quˇi{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ˇck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck broˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}ˇfox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox juˇmps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇ{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇer\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe ˇlazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy dˇ}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}ˇe {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e ˇ{}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}quˇi{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ˇck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck broˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}ˇfox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox juˇmps ov{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇ{er\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇer\nthe lazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe ˇlazy d}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy dˇ}o{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Insert"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg","mode":"Normal"}} diff --git a/crates/vim/test_data/test_change_w.json b/crates/vim/test_data/test_change_w.json index 1d93c94450b46699c6bd73c1dee866e3ab7f050e..586fbdf799046add8f72f707a4e2c84a900962e2 100644 --- a/crates/vim/test_data/test_change_w.json +++ b/crates/vim/test_data/test_change_w.json @@ -1 +1,28 @@ -[{"Text":"Te"},{"Mode":"Insert"},{"Selection":{"start":[0,2],"end":[0,2]}},{"Mode":"Insert"},{"Text":"T test"},{"Mode":"Insert"},{"Selection":{"start":[0,1],"end":[0,1]}},{"Mode":"Insert"},{"Text":"Testtest"},{"Mode":"Insert"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Insert"},{"Text":"Test te\ntest"},{"Mode":"Insert"},{"Selection":{"start":[0,7],"end":[0,7]}},{"Mode":"Insert"},{"Text":"Test tes\ntest"},{"Mode":"Insert"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Insert"},{"Text":"Test test\n\ntest"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"Test te test"},{"Mode":"Insert"},{"Selection":{"start":[0,7],"end":[0,7]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"Teˇst"}} +{"Key":"c"} +{"Key":"w"} +{"Get":{"state":"Teˇ","mode":"Insert"}} +{"Put":{"state":"Tˇest test"}} +{"Key":"c"} +{"Key":"w"} +{"Get":{"state":"Tˇ test","mode":"Insert"}} +{"Put":{"state":"Testˇ test"}} +{"Key":"c"} +{"Key":"w"} +{"Get":{"state":"Testˇtest","mode":"Insert"}} +{"Put":{"state":"Test teˇst\ntest"}} +{"Key":"c"} +{"Key":"w"} +{"Get":{"state":"Test teˇ\ntest","mode":"Insert"}} +{"Put":{"state":"Test tesˇt\ntest"}} +{"Key":"c"} +{"Key":"w"} +{"Get":{"state":"Test tesˇ\ntest","mode":"Insert"}} +{"Put":{"state":"Test test\nˇ\ntest"}} +{"Key":"c"} +{"Key":"w"} +{"Get":{"state":"Test test\nˇ\ntest","mode":"Insert"}} +{"Put":{"state":"Test teˇst-test test"}} +{"Key":"c"} +{"Key":"shift-w"} +{"Get":{"state":"Test teˇ test","mode":"Insert"}} diff --git a/crates/vim/test_data/test_change_word_object.json b/crates/vim/test_data/test_change_word_object.json index e96efcaa7c4e0cd1a988c0625330c05240b871be..18baf78c6e40df55dfa2787c57e911486143e0e3 100644 --- a/crates/vim/test_data/test_change_word_object.json +++ b/crates/vim/test_data/test_change_word_object.json @@ -1 +1,460 @@ -[{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick brown\nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumpsover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog\n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[5,0],"end":[5,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThequick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,3],"end":[6,3]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe- brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,4],"end":[6,4]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe- brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,4],"end":[6,4]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,9],"end":[6,9]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,10],"end":[6,10]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown\n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,15],"end":[6,15]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n\n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[7,0],"end":[7,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n\n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[8,0],"end":[8,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nfox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[9,0],"end":[9,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox- over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[9,6],"end":[9,6]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog\n\n"},{"Mode":"Insert"},{"Selection":{"start":[10,12],"end":[10,12]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[11,0],"end":[11,0]}},{"Mode":"Insert"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick brown\nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumpsover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog\n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[5,0],"end":[5,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,9],"end":[6,9]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,10],"end":[6,10]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown\n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,15],"end":[6,15]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n\n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[7,0],"end":[7,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n\n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[8,0],"end":[8,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nfox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[9,0],"end":[9,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[9,2],"end":[9,2]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog\n\n"},{"Mode":"Insert"},{"Selection":{"start":[10,12],"end":[10,12]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[11,0],"end":[11,0]}},{"Mode":"Insert"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick brown jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[5,0],"end":[5,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThequick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,3],"end":[6,3]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,4],"end":[6,4]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,4],"end":[6,4]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,9],"end":[6,9]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,10],"end":[6,10]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,15],"end":[6,15]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[7,0],"end":[7,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[8,0],"end":[8,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[9,0],"end":[9,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[9,6],"end":[9,6]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[10,12],"end":[10,12]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n"},{"Mode":"Insert"},{"Selection":{"start":[11,0],"end":[11,0]}},{"Mode":"Insert"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick brown jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[5,0],"end":[5,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,9],"end":[6,9]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,10],"end":[6,10]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[6,15],"end":[6,15]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[7,0],"end":[7,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[8,0],"end":[8,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[9,0],"end":[9,0]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n over\nthe lazy dog \n\n"},{"Mode":"Insert"},{"Selection":{"start":[9,2],"end":[9,2]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[10,12],"end":[10,12]}},{"Mode":"Insert"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n"},{"Mode":"Insert"},{"Selection":{"start":[11,0],"end":[11,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick ˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick ˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brownˇ\nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox ˇjumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox ˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox juˇmps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox ˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumpsˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumpsˇover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ\n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThˇe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quˇick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇ \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ\n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ\n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ\n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇfox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumpˇs over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-ˇ over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ\n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick ˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick ˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brownˇ\nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox ˇjumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox ˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox juˇmps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox ˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumpsˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumpsˇover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ\n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThˇe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quˇick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇ \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ\n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ\n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ\n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇfox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumpˇs over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n ˇ over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ \n\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ\n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n"}} +{"Key":"c"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick ˇ\nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick ˇ\nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brownˇ jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox ˇjumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox ˇover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox juˇmps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox ˇover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumpsˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumpsˇ\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThˇe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quˇick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇ\n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumpˇs over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-ˇover\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ","mode":"Insert"}} +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick ˇ\nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick ˇ\nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brownˇ jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox ˇjumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox ˇover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox juˇmps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox ˇover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumpsˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumpsˇ\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThˇe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quˇick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇ\n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ over\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumpˇs over\nthe lazy dog \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n ˇover\nthe lazy dog \n\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ \n\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n"}} +{"Key":"c"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ","mode":"Insert"}} diff --git a/crates/vim/test_data/test_dd.json b/crates/vim/test_data/test_dd.json index fa86b9d3b5821d66e34ec80325ba8f32c0d10c1f..c6dc30882e00804b6125e8f75734ad5d8f1dc732 100644 --- a/crates/vim/test_data/test_dd.json +++ b/crates/vim/test_data/test_dd.json @@ -1 +1,24 @@ -[{"Text":""},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":""},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"brown fox\njumps over"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"The quick\njumps over"},{"Mode":"Normal"},{"Selection":{"start":[1,6],"end":[1,6]}},{"Mode":"Normal"},{"Text":"The quick\nbrown fox"},{"Mode":"Normal"},{"Selection":{"start":[1,6],"end":[1,6]}},{"Mode":"Normal"},{"Text":"The quick\nbrown fox"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇ"}} +{"Key":"d"} +{"Key":"d"} +{"Get":{"state":"ˇ","mode":"Normal"}} +{"Put":{"state":"The ˇquick"}} +{"Key":"d"} +{"Key":"d"} +{"Get":{"state":"ˇ","mode":"Normal"}} +{"Put":{"state":"The qˇuick\nbrown fox\njumps over"}} +{"Key":"d"} +{"Key":"d"} +{"Get":{"state":"brownˇ fox\njumps over","mode":"Normal"}} +{"Put":{"state":"The quick\nbrown ˇfox\njumps over"}} +{"Key":"d"} +{"Key":"d"} +{"Get":{"state":"The quick\njumps ˇover","mode":"Normal"}} +{"Put":{"state":"The quick\nbrown fox\njumps ˇover"}} +{"Key":"d"} +{"Key":"d"} +{"Get":{"state":"The quick\nbrown ˇfox","mode":"Normal"}} +{"Put":{"state":"The quick\nˇ\nbrown fox"}} +{"Key":"d"} +{"Key":"d"} +{"Get":{"state":"The quick\nˇbrown fox","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_0.json b/crates/vim/test_data/test_delete_0.json index 0ecb12f47b5a9c55d74576ced0f4aed833545822..10095cefbbaff382bc70a74b61a1ebf340d4aae4 100644 --- a/crates/vim/test_data/test_delete_0.json +++ b/crates/vim/test_data/test_delete_0.json @@ -1 +1,8 @@ -[{"Text":"uick\nbrown fox"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick\n\nbrown fox"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The qˇuick\nbrown fox"}} +{"Key":"d"} +{"Key":"0"} +{"Get":{"state":"ˇuick\nbrown fox","mode":"Normal"}} +{"Put":{"state":"The quick\nˇ\nbrown fox"}} +{"Key":"d"} +{"Key":"0"} +{"Get":{"state":"The quick\nˇ\nbrown fox","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_b.json b/crates/vim/test_data/test_delete_b.json index 59e5a3373a3581c9d389a95ce9c600a7ce69e84c..932a4c19677fb9e00b5e043707a8e01e64b0663b 100644 --- a/crates/vim/test_data/test_delete_b.json +++ b/crates/vim/test_data/test_delete_b.json @@ -1 +1,24 @@ -[{"Text":"st Test"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"test"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Test1 test3"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Test \ntest"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"Test \n\ntest"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"Test test"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"Teˇst Test"}} +{"Key":"d"} +{"Key":"b"} +{"Get":{"state":"ˇst Test","mode":"Normal"}} +{"Put":{"state":"Test ˇtest"}} +{"Key":"d"} +{"Key":"b"} +{"Get":{"state":"ˇtest","mode":"Normal"}} +{"Put":{"state":"Test1 test2 ˇtest3"}} +{"Key":"d"} +{"Key":"b"} +{"Get":{"state":"Test1 ˇtest3","mode":"Normal"}} +{"Put":{"state":"Test test\nˇtest"}} +{"Key":"d"} +{"Key":"b"} +{"Get":{"state":"Testˇ \ntest","mode":"Normal"}} +{"Put":{"state":"Test test\nˇ\ntest"}} +{"Key":"d"} +{"Key":"b"} +{"Get":{"state":"Testˇ \n\ntest","mode":"Normal"}} +{"Put":{"state":"Test test-test ˇtest"}} +{"Key":"d"} +{"Key":"shift-b"} +{"Get":{"state":"Test ˇtest","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_e.json b/crates/vim/test_data/test_delete_e.json index e1bc41562000b4dd16d60607ddd78db2f6197925..ebbad8fc4d4fcb64ce59fc12e4a855216be19fba 100644 --- a/crates/vim/test_data/test_delete_e.json +++ b/crates/vim/test_data/test_delete_e.json @@ -1 +1,20 @@ -[{"Text":"Te Test"},{"Mode":"Normal"},{"Selection":{"start":[0,2],"end":[0,2]}},{"Mode":"Normal"},{"Text":"T test"},{"Mode":"Normal"},{"Selection":{"start":[0,1],"end":[0,1]}},{"Mode":"Normal"},{"Text":"Test te\ntest"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Test tes"},{"Mode":"Normal"},{"Selection":{"start":[0,7],"end":[0,7]}},{"Mode":"Normal"},{"Text":"Test te test"},{"Mode":"Normal"},{"Selection":{"start":[0,7],"end":[0,7]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"Teˇst Test"}} +{"Key":"d"} +{"Key":"e"} +{"Get":{"state":"Teˇ Test","mode":"Normal"}} +{"Put":{"state":"Tˇest test"}} +{"Key":"d"} +{"Key":"e"} +{"Get":{"state":"Tˇ test","mode":"Normal"}} +{"Put":{"state":"Test teˇst\ntest"}} +{"Key":"d"} +{"Key":"e"} +{"Get":{"state":"Test tˇe\ntest","mode":"Normal"}} +{"Put":{"state":"Test tesˇt\ntest"}} +{"Key":"d"} +{"Key":"e"} +{"Get":{"state":"Test teˇs","mode":"Normal"}} +{"Put":{"state":"Test teˇst-test test"}} +{"Key":"d"} +{"Key":"shift-e"} +{"Get":{"state":"Test teˇ test","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_end_of_document.json b/crates/vim/test_data/test_delete_end_of_document.json index a43eb2d6fd28986c1ac7f908bf126ad5012c6aa6..863d15aca1f587a20bf12734966a0c2599324655 100644 --- a/crates/vim/test_data/test_delete_end_of_document.json +++ b/crates/vim/test_data/test_delete_end_of_document.json @@ -1 +1,16 @@ -[{"Text":"The quick"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"The quick"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"The quick\nbrown fox\njumps over"},{"Mode":"Normal"},{"Selection":{"start":[2,5],"end":[2,5]}},{"Mode":"Normal"},{"Text":"The quick\nbrown fox\njumps over"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The quick\nbrownˇ fox\njumps over\nthe lazy"}} +{"Key":"d"} +{"Key":"shift-g"} +{"Get":{"state":"The qˇuick","mode":"Normal"}} +{"Put":{"state":"The quick\nbrownˇ fox\njumps over\nthe lazy"}} +{"Key":"d"} +{"Key":"shift-g"} +{"Get":{"state":"The qˇuick","mode":"Normal"}} +{"Put":{"state":"The quick\nbrown fox\njumps over\nthe lˇazy"}} +{"Key":"d"} +{"Key":"shift-g"} +{"Get":{"state":"The quick\nbrown fox\njumpsˇ over","mode":"Normal"}} +{"Put":{"state":"The quick\nbrown fox\njumps over\nˇ"}} +{"Key":"d"} +{"Key":"shift-g"} +{"Get":{"state":"The quick\nbrown fox\nˇjumps over","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_end_of_line.json b/crates/vim/test_data/test_delete_end_of_line.json index 591dac42000566773524971edd491f2e44c89c6a..93f0cc24597a5120d88ccd440507dbf04273f851 100644 --- a/crates/vim/test_data/test_delete_end_of_line.json +++ b/crates/vim/test_data/test_delete_end_of_line.json @@ -1 +1,8 @@ -[{"Text":"The q\nbrown fox"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"The quick\n\nbrown fox"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The qˇuick\nbrown fox"}} +{"Key":"d"} +{"Key":"$"} +{"Get":{"state":"The ˇq\nbrown fox","mode":"Normal"}} +{"Put":{"state":"The quick\nˇ\nbrown fox"}} +{"Key":"d"} +{"Key":"$"} +{"Get":{"state":"The quick\nˇ\nbrown fox","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_gg.json b/crates/vim/test_data/test_delete_gg.json index ac6e54f355707cfe28182394d6421a963ed3ddc8..de6aca96651246e417687df93fd5e46386f454a0 100644 --- a/crates/vim/test_data/test_delete_gg.json +++ b/crates/vim/test_data/test_delete_gg.json @@ -1 +1,20 @@ -[{"Text":"jumps over\nthe lazy"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":""},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"brown fox\njumps over\nthe lazy"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"brown fox\njumps over\nthe lazy"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The quick\nbrownˇ fox\njumps over\nthe lazy"}} +{"Key":"d"} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"jumpsˇ over\nthe lazy","mode":"Normal"}} +{"Put":{"state":"The quick\nbrown fox\njumps over\nthe lˇazy"}} +{"Key":"d"} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"ˇ","mode":"Normal"}} +{"Put":{"state":"The qˇuick\nbrown fox\njumps over\nthe lazy"}} +{"Key":"d"} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"brownˇ fox\njumps over\nthe lazy","mode":"Normal"}} +{"Put":{"state":"ˇ\nbrown fox\njumps over\nthe lazy"}} +{"Key":"d"} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"ˇbrown fox\njumps over\nthe lazy","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_h.json b/crates/vim/test_data/test_delete_h.json index 490e7377e90c6e2b0d9bc86ce91e68bd497dbb85..cf842a386ec7e764297a5a884ca8d3f91ee3cd19 100644 --- a/crates/vim/test_data/test_delete_h.json +++ b/crates/vim/test_data/test_delete_h.json @@ -1 +1,16 @@ -[{"Text":"Tst"},{"Mode":"Normal"},{"Selection":{"start":[0,1],"end":[0,1]}},{"Mode":"Normal"},{"Text":"est"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Test"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Test\ntest"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"Teˇst"}} +{"Key":"d"} +{"Key":"h"} +{"Get":{"state":"Tˇst","mode":"Normal"}} +{"Put":{"state":"Tˇest"}} +{"Key":"d"} +{"Key":"h"} +{"Get":{"state":"ˇest","mode":"Normal"}} +{"Put":{"state":"ˇTest"}} +{"Key":"d"} +{"Key":"h"} +{"Get":{"state":"ˇTest","mode":"Normal"}} +{"Put":{"state":"Test\nˇtest"}} +{"Key":"d"} +{"Key":"h"} +{"Get":{"state":"Test\nˇtest","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_j.json b/crates/vim/test_data/test_delete_j.json index fc561ca0e5a8607dec8bb613301d272b79bb4ef2..76c2f098d3ed4f59cd6d11c49b202662ca7550b1 100644 --- a/crates/vim/test_data/test_delete_j.json +++ b/crates/vim/test_data/test_delete_j.json @@ -1 +1,16 @@ -[{"Text":"The quick"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"The quick\nbrown fox\njumps over"},{"Mode":"Normal"},{"Selection":{"start":[2,6],"end":[2,6]}},{"Mode":"Normal"},{"Text":"jumps over"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"The quick\nbrown fox\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The quick\nbrown ˇfox\njumps over"}} +{"Key":"d"} +{"Key":"j"} +{"Get":{"state":"The quˇick","mode":"Normal"}} +{"Put":{"state":"The quick\nbrown fox\njumps ˇover"}} +{"Key":"d"} +{"Key":"j"} +{"Get":{"state":"The quick\nbrown fox\njumps ˇover","mode":"Normal"}} +{"Put":{"state":"The qˇuick\nbrown fox\njumps over"}} +{"Key":"d"} +{"Key":"j"} +{"Get":{"state":"jumpsˇ over","mode":"Normal"}} +{"Put":{"state":"The quick\nbrown fox\nˇ"}} +{"Key":"d"} +{"Key":"j"} +{"Get":{"state":"The quick\nbrown fox\nˇ","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_k.json b/crates/vim/test_data/test_delete_k.json index 3985b9501c8bd2c01b732a89c538317a11c15438..75c032430c9753c7ac88e09956b40cac8313d0db 100644 --- a/crates/vim/test_data/test_delete_k.json +++ b/crates/vim/test_data/test_delete_k.json @@ -1 +1,16 @@ -[{"Text":"jumps over"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"The quick"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"The quick\nbrown fox\njumps over"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"brown fox\njumps over"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The quick\nbrown ˇfox\njumps over"}} +{"Key":"d"} +{"Key":"k"} +{"Get":{"state":"jumps ˇover","mode":"Normal"}} +{"Put":{"state":"The quick\nbrown fox\njumps ˇover"}} +{"Key":"d"} +{"Key":"k"} +{"Get":{"state":"The quˇick","mode":"Normal"}} +{"Put":{"state":"The qˇuick\nbrown fox\njumps over"}} +{"Key":"d"} +{"Key":"k"} +{"Get":{"state":"The qˇuick\nbrown fox\njumps over","mode":"Normal"}} +{"Put":{"state":"ˇbrown fox\njumps over"}} +{"Key":"d"} +{"Key":"k"} +{"Get":{"state":"ˇbrown fox\njumps over","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_l.json b/crates/vim/test_data/test_delete_l.json index ca85e2842ba4703a54891bc74d8b39dda02bca4c..60b3a6c9b1ccd305733897e813ea4f9891468eb2 100644 --- a/crates/vim/test_data/test_delete_l.json +++ b/crates/vim/test_data/test_delete_l.json @@ -1 +1,16 @@ -[{"Text":"est"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Tet"},{"Mode":"Normal"},{"Selection":{"start":[0,2],"end":[0,2]}},{"Mode":"Normal"},{"Text":"Tes"},{"Mode":"Normal"},{"Selection":{"start":[0,2],"end":[0,2]}},{"Mode":"Normal"},{"Text":"Tes\ntest"},{"Mode":"Normal"},{"Selection":{"start":[0,2],"end":[0,2]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇTest"}} +{"Key":"d"} +{"Key":"l"} +{"Get":{"state":"ˇest","mode":"Normal"}} +{"Put":{"state":"Teˇst"}} +{"Key":"d"} +{"Key":"l"} +{"Get":{"state":"Teˇt","mode":"Normal"}} +{"Put":{"state":"Tesˇt"}} +{"Key":"d"} +{"Key":"l"} +{"Get":{"state":"Teˇs","mode":"Normal"}} +{"Put":{"state":"Tesˇt\ntest"}} +{"Key":"d"} +{"Key":"l"} +{"Get":{"state":"Teˇs\ntest","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_left.json b/crates/vim/test_data/test_delete_left.json index 06e24f34f74e897fca4be0db195ece311a147b5a..a8a242f1f6a2c2f510064dcaa8f643c11282dc1a 100644 --- a/crates/vim/test_data/test_delete_left.json +++ b/crates/vim/test_data/test_delete_left.json @@ -1 +1,15 @@ -[{"Text":"Test"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"est"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Tst"},{"Mode":"Normal"},{"Selection":{"start":[0,1],"end":[0,1]}},{"Mode":"Normal"},{"Text":"Tet"},{"Mode":"Normal"},{"Selection":{"start":[0,2],"end":[0,2]}},{"Mode":"Normal"},{"Text":"Test\ntest"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇTest"}} +{"Key":"shift-x"} +{"Get":{"state":"ˇTest","mode":"Normal"}} +{"Put":{"state":"Tˇest"}} +{"Key":"shift-x"} +{"Get":{"state":"ˇest","mode":"Normal"}} +{"Put":{"state":"Teˇst"}} +{"Key":"shift-x"} +{"Get":{"state":"Tˇst","mode":"Normal"}} +{"Put":{"state":"Tesˇt"}} +{"Key":"shift-x"} +{"Get":{"state":"Teˇt","mode":"Normal"}} +{"Put":{"state":"Test\nˇtest"}} +{"Key":"shift-x"} +{"Get":{"state":"Test\nˇtest","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_sentence_object.json b/crates/vim/test_data/test_delete_sentence_object.json index 1dfae9eca4c41ec0c0af59d0b8d0b0497a308395..5e657f35d5ac785b4f3be92d2f762f1a46e2ad8d 100644 --- a/crates/vim/test_data/test_delete_sentence_object.json +++ b/crates/vim/test_data/test_delete_sentence_object.json @@ -1 +1,270 @@ -[{"Text":" Fox Jumps! Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" Fox Jumps! Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" Fox Jumps! Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick brown?Fox Jumps! Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,16],"end":[0,16]}},{"Mode":"Normal"},{"Text":"The quick brown? Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,17],"end":[0,17]}},{"Mode":"Normal"},{"Text":"The quick brown? Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,17],"end":[0,17]}},{"Mode":"Normal"},{"Text":"The quick brown? Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,17],"end":[0,17]}},{"Mode":"Normal"},{"Text":"The quick brown? Fox Jumps!Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,27],"end":[0,27]}},{"Mode":"Normal"},{"Text":"The quick brown? Fox Jumps! "},{"Mode":"Normal"},{"Selection":{"start":[0,27],"end":[0,27]}},{"Mode":"Normal"},{"Text":"The quick brown? Fox Jumps! "},{"Mode":"Normal"},{"Selection":{"start":[0,27],"end":[0,27]}},{"Mode":"Normal"},{"Text":"The quick brown? Fox Jumps! "},{"Mode":"Normal"},{"Selection":{"start":[0,27],"end":[0,27]}},{"Mode":"Normal"},{"Text":" The quick \nbrown fox jumps over\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" The quick \nbrown fox jumps over\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" The quick \nbrown fox jumps over\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" The quick \nbrown fox jumps over\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" The quick \nbrown fox jumps over\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog.The quick \nbrown fox jumps over\n"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog. \n"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog. \n"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":" Brown fox jumps. "},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" Brown fox jumps. "},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" Brown fox jumps. "},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" Brown fox jumps. "},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" Brown fox jumps. "},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" Brown fox jumps. "},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick brown.)]'\" "},{"Mode":"Normal"},{"Selection":{"start":[0,21],"end":[0,21]}},{"Mode":"Normal"},{"Text":"The quick brown.)]'\" "},{"Mode":"Normal"},{"Selection":{"start":[0,21],"end":[0,21]}},{"Mode":"Normal"},{"Text":"The quick brown.)]'\" Brown fox jumps."},{"Mode":"Normal"},{"Selection":{"start":[0,36],"end":[0,36]}},{"Mode":"Normal"},{"Text":"Fox Jumps! Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Fox Jumps! Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Fox Jumps! Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick brown? Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,17],"end":[0,17]}},{"Mode":"Normal"},{"Text":"The quick brown? Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,17],"end":[0,17]}},{"Mode":"Normal"},{"Text":"The quick brown? Over the lazy."},{"Mode":"Normal"},{"Selection":{"start":[0,17],"end":[0,17]}},{"Mode":"Normal"},{"Text":"The quick brown? Fox Jumps!"},{"Mode":"Normal"},{"Selection":{"start":[0,26],"end":[0,26]}},{"Mode":"Normal"},{"Text":"The quick brown? Fox Jumps!"},{"Mode":"Normal"},{"Selection":{"start":[0,26],"end":[0,26]}},{"Mode":"Normal"},{"Text":"The quick brown? Fox Jumps!"},{"Mode":"Normal"},{"Selection":{"start":[0,26],"end":[0,26]}},{"Mode":"Normal"},{"Text":"The quick brown? Fox Jumps!"},{"Mode":"Normal"},{"Selection":{"start":[0,26],"end":[0,26]}},{"Mode":"Normal"},{"Text":"The quick \nbrown fox jumps over\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick \nbrown fox jumps over\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick \nbrown fox jumps over\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick \nbrown fox jumps over\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick \nbrown fox jumps over\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog.\n"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog.\n"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog.\n"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Brown fox jumps. "},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Brown fox jumps. "},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Brown fox jumps. "},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Brown fox jumps. "},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Brown fox jumps. "},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Brown fox jumps. "},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick brown.)]'\" "},{"Mode":"Normal"},{"Selection":{"start":[0,20],"end":[0,20]}},{"Mode":"Normal"},{"Text":"The quick brown.)]'\" "},{"Mode":"Normal"},{"Selection":{"start":[0,20],"end":[0,20]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick brown? Fox Jumps! Over the lazy."}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Fox Jumps! Over the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick ˇbrown? Fox Jumps! Over the lazy."}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Fox Jumps! Over the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick brownˇ? Fox Jumps! Over the lazy."}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Fox Jumps! Over the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick brown?ˇ Fox Jumps! Over the lazy."}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown?ˇFox Jumps! Over the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick brown? ˇFox Jumps! Over the lazy."}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? ˇ Over the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick brown? Fox Jˇumps! Over the lazy."}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? ˇ Over the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick brown? Fox Jumpsˇ! Over the lazy."}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? ˇ Over the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick brown? Fox Jumps!ˇ Over the lazy."}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumps!ˇOver the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick brown? Fox Jumps! Ovˇer the lazy."}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumps!ˇ ","mode":"Normal"}} +{"Put":{"state":"The quick brown? Fox Jumps! Over theˇ lazy."}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumps!ˇ ","mode":"Normal"}} +{"Put":{"state":"The quick brown? Fox Jumps! Over the lazyˇ."}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumps!ˇ ","mode":"Normal"}} +{"Put":{"state":"ˇThe quick brown \nfox jumps over\nthe lazy dog. The quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ The quick \nbrown fox jumps over\n","mode":"Normal"}} +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog. The quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ The quick \nbrown fox jumps over\n","mode":"Normal"}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog. The quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ The quick \nbrown fox jumps over\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy doˇg. The quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ The quick \nbrown fox jumps over\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ. The quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ The quick \nbrown fox jumps over\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog.ˇ The quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog.ˇThe quick \nbrown fox jumps over\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog. ˇThe quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog.ˇ \n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog. The quick ˇ\nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog.ˇ \n","mode":"Normal"}} +{"Put":{"state":"ˇThe quick brown.)]'\" Brown fox jumps. "}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Brown fox jumps. ","mode":"Normal"}} +{"Put":{"state":"The ˇquick brown.)]'\" Brown fox jumps. "}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Brown fox jumps. ","mode":"Normal"}} +{"Put":{"state":"The quick brownˇ.)]'\" Brown fox jumps. "}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Brown fox jumps. ","mode":"Normal"}} +{"Put":{"state":"The quick brown.)ˇ]'\" Brown fox jumps. "}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Brown fox jumps. ","mode":"Normal"}} +{"Put":{"state":"The quick brown.)]ˇ'\" Brown fox jumps. "}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Brown fox jumps. ","mode":"Normal"}} +{"Put":{"state":"The quick brown.)]'ˇ\" Brown fox jumps. "}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"ˇ Brown fox jumps. ","mode":"Normal"}} +{"Put":{"state":"The quick brown.)]'\" Brown ˇfox jumps. "}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown.)]'\" ˇ ","mode":"Normal"}} +{"Put":{"state":"The quick brown.)]'\" Brown fox jumpsˇ. "}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown.)]'\" ˇ ","mode":"Normal"}} +{"Put":{"state":"The quick brown.)]'\" Brown fox jumps.ˇ "}} +{"Key":"d"} +{"Key":"i"} +{"Key":"s"} +{"Get":{"state":"The quick brown.)]'\" Brown fox jumpsˇ.","mode":"Normal"}} +{"Put":{"state":"ˇThe quick brown? Fox Jumps! Over the lazy."}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇFox Jumps! Over the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick ˇbrown? Fox Jumps! Over the lazy."}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇFox Jumps! Over the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick brownˇ? Fox Jumps! Over the lazy."}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇFox Jumps! Over the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick brown? ˇFox Jumps! Over the lazy."}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? ˇOver the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick brown? Fox Jˇumps! Over the lazy."}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? ˇOver the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick brown? Fox Jumpsˇ! Over the lazy."}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? ˇOver the lazy.","mode":"Normal"}} +{"Put":{"state":"The quick brown? Fox Jumps!ˇ Over the lazy."}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumpsˇ!","mode":"Normal"}} +{"Put":{"state":"The quick brown? Fox Jumps! Ovˇer the lazy."}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumpsˇ!","mode":"Normal"}} +{"Put":{"state":"The quick brown? Fox Jumps! Over theˇ lazy."}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumpsˇ!","mode":"Normal"}} +{"Put":{"state":"The quick brown? Fox Jumps! Over the lazyˇ."}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown? Fox Jumpsˇ!","mode":"Normal"}} +{"Put":{"state":"ˇThe quick brown \nfox jumps over\nthe lazy dog. The quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇThe quick \nbrown fox jumps over\n","mode":"Normal"}} +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog. The quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇThe quick \nbrown fox jumps over\n","mode":"Normal"}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog. The quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇThe quick \nbrown fox jumps over\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy doˇg. The quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇThe quick \nbrown fox jumps over\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ. The quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇThe quick \nbrown fox jumps over\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog.ˇ The quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ.\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog. ˇThe quick \nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ.\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog. The quick ˇ\nbrown fox jumps over\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ.\n","mode":"Normal"}} +{"Put":{"state":"ˇThe quick brown.)]'\" Brown fox jumps. "}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇBrown fox jumps. ","mode":"Normal"}} +{"Put":{"state":"The ˇquick brown.)]'\" Brown fox jumps. "}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇBrown fox jumps. ","mode":"Normal"}} +{"Put":{"state":"The quick brownˇ.)]'\" Brown fox jumps. "}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇBrown fox jumps. ","mode":"Normal"}} +{"Put":{"state":"The quick brown.)ˇ]'\" Brown fox jumps. "}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇBrown fox jumps. ","mode":"Normal"}} +{"Put":{"state":"The quick brown.)]ˇ'\" Brown fox jumps. "}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇBrown fox jumps. ","mode":"Normal"}} +{"Put":{"state":"The quick brown.)]'ˇ\" Brown fox jumps. "}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"ˇBrown fox jumps. ","mode":"Normal"}} +{"Put":{"state":"The quick brown.)]'\" Brown ˇfox jumps. "}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown.)]'\"ˇ ","mode":"Normal"}} +{"Put":{"state":"The quick brown.)]'\" Brown fox jumpsˇ. "}} +{"Key":"d"} +{"Key":"a"} +{"Key":"s"} +{"Get":{"state":"The quick brown.)]'\"ˇ ","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_surrounding_character_objects.json b/crates/vim/test_data/test_delete_surrounding_character_objects.json index 374c38015ea22373c4a4f06752e485e9e5efcdbd..81b1f563e19fd477fc2f217e7f33fdf58b546eaa 100644 --- a/crates/vim/test_data/test_delete_surrounding_character_objects.json +++ b/crates/vim/test_data/test_delete_surrounding_character_objects.json @@ -1 +1,1014 @@ -[{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui()wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov()o(g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th)e qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th)e qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th)e qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th)e qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th)e qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th)e qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th)e ()quiwn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ovo(g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[]o[g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th]e qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th]e qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th]e qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th]e qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th]e qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th]e qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th]e []quiwn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ovo[g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{}o{g"},{"Mode":"Normal"},{"Selection":{"start":[1,14],"end":[1,14]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th}e qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th}e qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th}e qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Th}e qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th}e qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th}e qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th}e {}quiwn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ovo{g"},{"Mode":"Normal"},{"Selection":{"start":[1,13],"end":[1,13]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,12],"end":[2,12]}},{"Mode":"Normal"},{"Text":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"},{"Mode":"Normal"},{"Selection":{"start":[2,13],"end":[2,13]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)ˇe ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ˇ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()quˇi(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ˇck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck broˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)ˇfox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox juˇmps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇ(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇer\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe ˇlazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy dˇ)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)ˇe ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ˇ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()quˇi(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ˇck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck broˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)ˇfox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox juˇmps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇ(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇer\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe ˇlazy d)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy dˇ)o(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇ)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg"}} +{"Key":"d"} +{"Key":"i"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)ˇe ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ˇ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()quˇi(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ˇck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck broˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)ˇfox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox juˇmps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇ(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇer\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe ˇlazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy dˇ)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"("} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"ˇTh)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)ˇe ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ˇ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e (ˇ)qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()ˇqui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()quˇi(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ˇck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck broˇ)wn(\n)fox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()quiˇwn(\n)fox jumps ov(er\nthe lazy d)o(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)ˇfox jumps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox juˇmps ov(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇ(er\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(ˇer\nthe lazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe ˇlazy d)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy dˇ)o(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ovˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)ˇo(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)oˇ(g","mode":"Normal"}} +{"Put":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg"}} +{"Key":"d"} +{"Key":"a"} +{"Key":")"} +{"Get":{"state":"Th)e ()qui(ck bro)wn(\n)fox jumps ov(er\nthe lazy d)o(ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]ˇe []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e ˇ[]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []quˇi[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ˇck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck broˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]ˇfox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox juˇmps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇ[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇer\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe ˇlazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy dˇ]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]ˇe []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e ˇ[]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []quˇi[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ˇck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck broˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]ˇfox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox juˇmps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇ[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇer\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe ˇlazy d]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy dˇ]o[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇ]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]ˇe []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e ˇ[]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []quˇi[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ˇck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck broˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]ˇfox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox juˇmps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇ[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇer\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe ˇlazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy dˇ]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"["} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"ˇTh]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]ˇe []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e ˇ[]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e [ˇ]qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []ˇqui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []quˇi[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ˇck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck broˇ]wn[\n]fox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []quiˇwn[\n]fox jumps ov[er\nthe lazy d]o[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]ˇfox jumps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox juˇmps ov[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇ[er\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[ˇer\nthe lazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe ˇlazy d]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy dˇ]o[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ovˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]ˇo[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]oˇ[g","mode":"Normal"}} +{"Put":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"]"} +{"Get":{"state":"Th]e []qui[ck bro]wn[\n]fox jumps ov[er\nthe lazy d]o[ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}ˇe {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e ˇ{}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}quˇi{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ˇck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck broˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}ˇfox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox juˇmps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇ{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇer\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe ˇlazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy dˇ}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}ˇe {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e ˇ{}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}quˇi{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ˇck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck broˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}ˇfox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox juˇmps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇ{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇer\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe ˇlazy d}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy dˇ}o{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇ}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}ˇe {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e ˇ{}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}quˇi{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ˇck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck broˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}ˇfox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox juˇmps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇ{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇer\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe ˇlazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy dˇ}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"{"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg","mode":"Normal"}} +{"Put":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"ˇTh}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}ˇe {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e ˇ{}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {ˇ}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}ˇqui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}quˇi{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ˇck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck broˇ}wn{\n}fox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}quiˇwn{\n}fox jumps ov{er\nthe lazy d}o{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}ˇfox jumps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox juˇmps ov{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇ{er\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{ˇer\nthe lazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe ˇlazy d}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy dˇ}o{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ovˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}ˇo{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}oˇ{g","mode":"Normal"}} +{"Put":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"}"} +{"Get":{"state":"Th}e {}qui{ck bro}wn{\n}fox jumps ov{er\nthe lazy d}o{ˇg","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_to_end_of_line.json b/crates/vim/test_data/test_delete_to_end_of_line.json index 591dac42000566773524971edd491f2e44c89c6a..e15d5d0c4ae335a81cd3c615988c7bf15aef9b53 100644 --- a/crates/vim/test_data/test_delete_to_end_of_line.json +++ b/crates/vim/test_data/test_delete_to_end_of_line.json @@ -1 +1,6 @@ -[{"Text":"The q\nbrown fox"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"The quick\n\nbrown fox"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The qˇuick\nbrown fox"}} +{"Key":"shift-d"} +{"Get":{"state":"The ˇq\nbrown fox","mode":"Normal"}} +{"Put":{"state":"The quick\nˇ\nbrown fox"}} +{"Key":"shift-d"} +{"Get":{"state":"The quick\nˇ\nbrown fox","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_w.json b/crates/vim/test_data/test_delete_w.json index cb05a3b53ae031daf517f70b907f2a143c9dc94e..c385ccb5469b44168feddd7b24a9e3bda7130666 100644 --- a/crates/vim/test_data/test_delete_w.json +++ b/crates/vim/test_data/test_delete_w.json @@ -1 +1,20 @@ -[{"Text":"Te"},{"Mode":"Normal"},{"Selection":{"start":[0,1],"end":[0,1]}},{"Mode":"Normal"},{"Text":"Ttest"},{"Mode":"Normal"},{"Selection":{"start":[0,1],"end":[0,1]}},{"Mode":"Normal"},{"Text":"Test te\ntest"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"Test tes\ntest"},{"Mode":"Normal"},{"Selection":{"start":[0,7],"end":[0,7]}},{"Mode":"Normal"},{"Text":"Test tetest"},{"Mode":"Normal"},{"Selection":{"start":[0,7],"end":[0,7]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"Teˇst"}} +{"Key":"d"} +{"Key":"w"} +{"Get":{"state":"Tˇe","mode":"Normal"}} +{"Put":{"state":"Tˇest test"}} +{"Key":"d"} +{"Key":"w"} +{"Get":{"state":"Tˇtest","mode":"Normal"}} +{"Put":{"state":"Test teˇst\ntest"}} +{"Key":"d"} +{"Key":"w"} +{"Get":{"state":"Test tˇe\ntest","mode":"Normal"}} +{"Put":{"state":"Test tesˇt\ntest"}} +{"Key":"d"} +{"Key":"w"} +{"Get":{"state":"Test teˇs\ntest","mode":"Normal"}} +{"Put":{"state":"Test teˇst-test test"}} +{"Key":"d"} +{"Key":"shift-w"} +{"Get":{"state":"Test teˇtest","mode":"Normal"}} diff --git a/crates/vim/test_data/test_delete_word_object.json b/crates/vim/test_data/test_delete_word_object.json index 7cd6ffbafc93fa2f6a77f37f714870f30bab53be..9c11d89a12b028d8658d92bf1dd5ccae5b771d3c 100644 --- a/crates/vim/test_data/test_delete_word_object.json +++ b/crates/vim/test_data/test_delete_word_object.json @@ -1 +1,460 @@ -[{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"The quick brown\nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumpsover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog\n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[5,0],"end":[5,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThequick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,3],"end":[6,3]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe- brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,4],"end":[6,4]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe- brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,4],"end":[6,4]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,9],"end":[6,9]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,10],"end":[6,10]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown\n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,14],"end":[6,14]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n\n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[7,0],"end":[7,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n\n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[8,0],"end":[8,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nfox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[9,0],"end":[9,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox- over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[9,6],"end":[9,6]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog\n\n"},{"Mode":"Normal"},{"Selection":{"start":[10,11],"end":[10,11]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[11,0],"end":[11,0]}},{"Mode":"Normal"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"The quick brown\nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumpsover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog\n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[5,0],"end":[5,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,9],"end":[6,9]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,10],"end":[6,10]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown\n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,14],"end":[6,14]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n\n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[7,0],"end":[7,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n\n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[8,0],"end":[8,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nfox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[9,0],"end":[9,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[9,2],"end":[9,2]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog\n\n"},{"Mode":"Normal"},{"Selection":{"start":[10,11],"end":[10,11]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[11,0],"end":[11,0]}},{"Mode":"Normal"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"The quick brown jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[1,8],"end":[1,8]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[5,0],"end":[5,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThequick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,3],"end":[6,3]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,4],"end":[6,4]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,4],"end":[6,4]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,9],"end":[6,9]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,9],"end":[6,9]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,15],"end":[6,15]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[7,0],"end":[7,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[8,0],"end":[8,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[9,0],"end":[9,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[9,6],"end":[9,6]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[10,11],"end":[10,11]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog "},{"Mode":"Normal"},{"Selection":{"start":[10,0],"end":[10,0]}},{"Mode":"Normal"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"The quick \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"The quick brown jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[1,8],"end":[1,8]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[5,0],"end":[5,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,0],"end":[6,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,9],"end":[6,9]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,9],"end":[6,9]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[6,15],"end":[6,15]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[7,0],"end":[7,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[8,0],"end":[8,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[9,0],"end":[9,0]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n over\nthe lazy dog \n\n"},{"Mode":"Normal"},{"Selection":{"start":[9,2],"end":[9,2]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[10,11],"end":[10,11]}},{"Mode":"Normal"},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog "},{"Mode":"Normal"},{"Selection":{"start":[10,0],"end":[10,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick ˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick browˇn \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick ˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick browˇn\nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox ˇjumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox ˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox juˇmps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox ˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumpsˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumpsˇover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy doˇg\n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThˇe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quˇick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇ \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick browˇn\n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ\n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ\n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇfox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumpˇs over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-ˇ over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy doˇg\n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n","mode":"Normal"}} +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick ˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick browˇn \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick ˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick browˇn\nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox ˇjumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox ˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox juˇmps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox ˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumpsˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumpsˇover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy doˇg\n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThˇe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quˇick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇ \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick browˇn\n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ\n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ\n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇfox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumpˇs over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n ˇ over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ \n\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy doˇg\n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n"}} +{"Key":"d"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n","mode":"Normal"}} +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quickˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick browˇn \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quickˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brownˇ jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox ˇjumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox ˇover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox juˇmps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox ˇover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumpsˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumpˇs\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy doˇg\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThˇe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quˇick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumpˇs over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-ˇover\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy doˇg\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nˇthe lazy dog ","mode":"Normal"}} +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quickˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick browˇn \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quickˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brownˇ jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox ˇjumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox ˇover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox juˇmps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox ˇover\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumpsˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumpˇs\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy doˇg\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThˇe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quˇick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ over\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumpˇs over\nthe lazy dog \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n ˇover\nthe lazy dog \n\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ \n\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy doˇg\n","mode":"Normal"}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n"}} +{"Key":"d"} +{"Key":"a"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nˇthe lazy dog ","mode":"Normal"}} diff --git a/crates/vim/test_data/test_e.json b/crates/vim/test_data/test_e.json index c4650284ddfc2a71e27e1ad070a3155b1863be8b..06f80dc245a06d86cf8478331d4e4b98d20fdef1 100644 --- a/crates/vim/test_data/test_e.json +++ b/crates/vim/test_data/test_e.json @@ -1 +1,32 @@ -[{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[3,8],"end":[3,8]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[3,13],"end":[3,13]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[4,2],"end":[4,2]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[4,2],"end":[4,2]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[3,8],"end":[3,8]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[3,13],"end":[3,13]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[4,2],"end":[4,2]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[4,2],"end":[4,2]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"Thˇe quick-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"e"} +{"Get":{"state":"The quicˇk-brown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Key":"e"} +{"Get":{"state":"The quickˇ-brown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Key":"e"} +{"Get":{"state":"The quick-browˇn\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Key":"e"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumpˇs over\nthe","mode":"Normal"}} +{"Key":"e"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps oveˇr\nthe","mode":"Normal"}} +{"Key":"e"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps over\nthˇe","mode":"Normal"}} +{"Key":"e"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps over\nthˇe","mode":"Normal"}} +{"Put":{"state":"Thˇe quick-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"shift-e"} +{"Get":{"state":"The quick-browˇn\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quicˇk-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"shift-e"} +{"Get":{"state":"The quick-browˇn\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quickˇ-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"shift-e"} +{"Get":{"state":"The quick-browˇn\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Key":"shift-e"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumpˇs over\nthe","mode":"Normal"}} +{"Key":"shift-e"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps oveˇr\nthe","mode":"Normal"}} +{"Key":"shift-e"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps over\nthˇe","mode":"Normal"}} +{"Key":"shift-e"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps over\nthˇe","mode":"Normal"}} diff --git a/crates/vim/test_data/test_end_of_document.json b/crates/vim/test_data/test_end_of_document.json index 2570db66daf77bf2727a35f0a2e279a871c29c93..2ad056170cdacf2a9d171326eed8fb5910041bb9 100644 --- a/crates/vim/test_data/test_end_of_document.json +++ b/crates/vim/test_data/test_end_of_document.json @@ -1 +1,15 @@ -[{"Text":"The quick\n\nbrown fox jumps\nover the lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[3,5],"end":[3,5]}},{"Mode":"Normal"},{"Text":"The quick\n\nbrown fox jumps\nover the lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[3,5],"end":[3,5]}},{"Mode":"Normal"},{"Text":"The quick\n\nbrown fox jumps\nover the lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[3,11],"end":[3,11]}},{"Mode":"Normal"},{"Text":"\n\nbrown fox jumps\nover the lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[3,11],"end":[3,11]}},{"Mode":"Normal"},{"Text":"\n\nbrown fox jumps\nover the lazydog"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The qˇuick\n\nbrown fox jumps\nover the lazy dog"}} +{"Key":"shift-g"} +{"Get":{"state":"The quick\n\nbrown fox jumps\nover ˇthe lazy dog","mode":"Normal"}} +{"Key":"shift-g"} +{"Get":{"state":"The quick\n\nbrown fox jumps\nover ˇthe lazy dog","mode":"Normal"}} +{"Put":{"state":"The quick\n\nbrown fox jumps\nover the laˇzy dog"}} +{"Key":"shift-g"} +{"Get":{"state":"The quick\n\nbrown fox jumps\nover the laˇzy dog","mode":"Normal"}} +{"Put":{"state":"\n\nbrown fox jumps\nover the laˇzy dog"}} +{"Key":"shift-g"} +{"Get":{"state":"\n\nbrown fox jumps\nover the laˇzy dog","mode":"Normal"}} +{"Put":{"state":"ˇ\n\nbrown fox jumps\nover the lazydog"}} +{"Key":"2"} +{"Key":"shift-g"} +{"Get":{"state":"\nˇ\nbrown fox jumps\nover the lazydog","mode":"Normal"}} diff --git a/crates/vim/test_data/test_enter.json b/crates/vim/test_data/test_enter.json index 1bbc077812c5216dbf4046082ae6f737d382e8d6..c010a1ffd23b81789bf93a33bbd9968f7e23641f 100644 --- a/crates/vim/test_data/test_enter.json +++ b/crates/vim/test_data/test_enter.json @@ -1 +1,11 @@ -[{"Text":"The quick brown\nfox jumps"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick brown\nfox jumps"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick brown\nfox jumps"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick brown\nfox jumps"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick brown\nfox jumps"}} +{"Key":"enter"} +{"Get":{"state":"The quick brown\nˇfox jumps","mode":"Normal"}} +{"Put":{"state":"The qˇuick brown\nfox jumps"}} +{"Key":"enter"} +{"Get":{"state":"The quick brown\nˇfox jumps","mode":"Normal"}} +{"Put":{"state":"The quick broˇwn\nfox jumps"}} +{"Key":"enter"} +{"Get":{"state":"The quick brown\nˇfox jumps","mode":"Normal"}} +{"Key":"enter"} +{"Get":{"state":"The quick brown\nˇfox jumps","mode":"Normal"}} diff --git a/crates/vim/test_data/test_enter_visual_mode.json b/crates/vim/test_data/test_enter_visual_mode.json index b13aa23589f03f7752966291bc6b11edd1033e0f..bd4e91977feb066fcead3f5fc6924faac593bcc5 100644 --- a/crates/vim/test_data/test_enter_visual_mode.json +++ b/crates/vim/test_data/test_enter_visual_mode.json @@ -1 +1,30 @@ -[{"Text":"The quick brown\nfox jumps over\nthe lazy dog"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[0,4],"end":[1,10]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown\nfox jumps over\nthe lazy dog"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[1,10],"end":[2,0]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown\nfox jumps over\nthe lazy dog"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[2,4],"end":[2,9]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown\nfox jumps over\nthe lazy dog"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[0,4],"end":[0,0]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown\nfox jumps over\nthe lazy dog"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[1,10],"end":[0,4]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown\nfox jumps over\nthe lazy dog"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[2,4],"end":[1,0]}},{"Mode":{"Visual":{"line":false}}}] \ No newline at end of file +{"Put":{"state":"The ˇquick brown\nfox jumps over\nthe lazy dog"}} +{"Key":"v"} +{"Key":"w"} +{"Key":"j"} +{"Get":{"state":"The «quick brown\nfox jumps ˇ»over\nthe lazy dog","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown\nfox jumps ˇover\nthe lazy dog"}} +{"Key":"v"} +{"Key":"w"} +{"Key":"j"} +{"Get":{"state":"The quick brown\nfox jumps «over\nˇ»the lazy dog","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown\nfox jumps over\nthe ˇlazy dog"}} +{"Key":"v"} +{"Key":"w"} +{"Key":"j"} +{"Get":{"state":"The quick brown\nfox jumps over\nthe «lazy ˇ»dog","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The ˇquick brown\nfox jumps over\nthe lazy dog"}} +{"Key":"v"} +{"Key":"b"} +{"Key":"k"} +{"Get":{"state":"«ˇThe »quick brown\nfox jumps over\nthe lazy dog","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown\nfox jumps ˇover\nthe lazy dog"}} +{"Key":"v"} +{"Key":"b"} +{"Key":"k"} +{"Get":{"state":"The «ˇquick brown\nfox jumps »over\nthe lazy dog","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown\nfox jumps over\nthe ˇlazy dog"}} +{"Key":"v"} +{"Key":"b"} +{"Key":"k"} +{"Get":{"state":"The quick brown\n«ˇfox jumps over\nthe »lazy dog","mode":{"Visual":{"line":false}}}} diff --git a/crates/vim/test_data/test_f_and_t.json b/crates/vim/test_data/test_f_and_t.json index 35f4fd5e1d694efa8ed5d07d93e0013d7d00e997..d370c5585c7b76548cbbbbbaff9648ae66967eca 100644 --- a/crates/vim/test_data/test_f_and_t.json +++ b/crates/vim/test_data/test_f_and_t.json @@ -1 +1,557 @@ -[{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,11],"end":[1,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,11],"end":[1,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,2],"end":[0,2]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,3],"end":[1,3]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,8],"end":[1,8]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,8],"end":[1,8]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,8],"end":[1,8]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,11],"end":[1,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,13],"end":[0,13]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,11],"end":[1,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,11],"end":[1,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,13],"end":[0,13]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,8],"end":[1,8]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,11],"end":[1,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,13],"end":[0,13]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,11],"end":[1,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,11],"end":[1,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,11],"end":[1,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,11],"end":[1,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,13],"end":[0,13]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[1,11],"end":[1,11]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"aaab b bb aaabaaa\n baaa bbb\n \nb\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n"}} +{"Key":"1"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n","mode":"Normal"}} +{"Put":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaˇab b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaˇabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaˇabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaˇabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n ˇ baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaaˇ bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaaˇ bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaaˇ bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n"}} +{"Key":"1"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n","mode":"Normal"}} +{"Put":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n"}} +{"Key":"2"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n","mode":"Normal"}} +{"Put":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaˇabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaaˇ bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n"}} +{"Key":"2"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n","mode":"Normal"}} +{"Put":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n"}} +{"Key":"3"} +{"Key":"f"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n","mode":"Normal"}} +{"Put":{"state":"ˇaaab b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇ bb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaaˇb b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaabˇ b bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab ˇb bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaˇabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab bˇ bb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaˇabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b ˇbb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bˇb aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bbˇ aaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aˇaabaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaaˇbaaa\n baaa bbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\nˇ baaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n ˇbaaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n bˇaaa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaˇa bbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa ˇbbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bˇbb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbˇb\n \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\nˇ \nb\n","mode":"Normal"}} +{"Put":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n"}} +{"Key":"3"} +{"Key":"t"} +{"Key":"b"} +{"Get":{"state":"aaab b bb aaabaaa\n baaa bbb\n \nˇb\n","mode":"Normal"}} diff --git a/crates/vim/test_data/test_gg.json b/crates/vim/test_data/test_gg.json index 39f86325bc91a4fc338c28d561e6b2529d727c61..7cc8291b131abde121424e509c44f0e2f09e0bc2 100644 --- a/crates/vim/test_data/test_gg.json +++ b/crates/vim/test_data/test_gg.json @@ -1 +1,21 @@ -[{"Text":"The quick\n\nbrown fox jumps\nover the lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"The quick\n\nbrown fox jumps\nover the lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"The quick\n\nbrown fox jumps\nover the lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"},{"Text":"\n\nbrown fox jumps\nover the lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"\n\nbrown fox jumps\nover the lazydog"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The qˇuick\n\nbrown fox jumps\nover the lazy dog"}} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"The qˇuick\n\nbrown fox jumps\nover the lazy dog","mode":"Normal"}} +{"Put":{"state":"The quick\n\nbrown fox jumps\nover ˇthe lazy dog"}} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"The qˇuick\n\nbrown fox jumps\nover the lazy dog","mode":"Normal"}} +{"Put":{"state":"The quick\n\nbrown fox jumps\nover the laˇzy dog"}} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"The quicˇk\n\nbrown fox jumps\nover the lazy dog","mode":"Normal"}} +{"Put":{"state":"\n\nbrown fox jumps\nover the laˇzy dog"}} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"ˇ\n\nbrown fox jumps\nover the lazy dog","mode":"Normal"}} +{"Put":{"state":"ˇ\n\nbrown fox jumps\nover the lazydog"}} +{"Key":"2"} +{"Key":"g"} +{"Key":"g"} +{"Get":{"state":"\nˇ\nbrown fox jumps\nover the lazydog","mode":"Normal"}} diff --git a/crates/vim/test_data/test_h.json b/crates/vim/test_data/test_h.json index 6eeff7997f69b435ff6d7ad8597648c52ffd0ae9..4cdf21032686af40b03bc09500ea5d8ac8843ba7 100644 --- a/crates/vim/test_data/test_h.json +++ b/crates/vim/test_data/test_h.json @@ -1 +1,9 @@ -[{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick\nbrown"}} +{"Key":"h"} +{"Get":{"state":"ˇThe quick\nbrown","mode":"Normal"}} +{"Put":{"state":"The qˇuick\nbrown"}} +{"Key":"h"} +{"Get":{"state":"The ˇquick\nbrown","mode":"Normal"}} +{"Put":{"state":"The quick\nˇbrown"}} +{"Key":"h"} +{"Get":{"state":"The quick\nˇbrown","mode":"Normal"}} diff --git a/crates/vim/test_data/test_h_through_unicode.json b/crates/vim/test_data/test_h_through_unicode.json index 86d6d0832d3c6f466318b5d56ad9dada6276c0ee..95b18396d0a8ac534a0b904209523db1dad09a89 100644 --- a/crates/vim/test_data/test_h_through_unicode.json +++ b/crates/vim/test_data/test_h_through_unicode.json @@ -1 +1,12 @@ -[{"Text":"Test├──┐Test"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"},{"Text":"Test├──┐Test"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"Test├──┐Test"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"Test├──┐Test"},{"Mode":"Normal"},{"Selection":{"start":[0,13],"end":[0,13]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"Testˇ├──┐Test"}} +{"Key":"h"} +{"Get":{"state":"Tesˇt├──┐Test","mode":"Normal"}} +{"Put":{"state":"Test├ˇ──┐Test"}} +{"Key":"h"} +{"Get":{"state":"Testˇ├──┐Test","mode":"Normal"}} +{"Put":{"state":"Test├──ˇ┐Test"}} +{"Key":"h"} +{"Get":{"state":"Test├─ˇ─┐Test","mode":"Normal"}} +{"Put":{"state":"Test├──┐ˇTest"}} +{"Key":"h"} +{"Get":{"state":"Test├──ˇ┐Test","mode":"Normal"}} diff --git a/crates/vim/test_data/test_insert_end_of_line.json b/crates/vim/test_data/test_insert_end_of_line.json index 6b377b0d2057829bc5e8031c83b071f44043b8b1..a37ad24d39ce17f89806a28a1b95bead0d31a2df 100644 --- a/crates/vim/test_data/test_insert_end_of_line.json +++ b/crates/vim/test_data/test_insert_end_of_line.json @@ -1 +1,9 @@ -[{"Text":"\nThe quick\nbrown fox "},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nThe quick\nbrown fox "},{"Mode":"Insert"},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":"Insert"},{"Text":"\nThe quick\nbrown fox "},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"ˇ\nThe quick\nbrown fox "}} +{"Key":"shift-a"} +{"Get":{"state":"ˇ\nThe quick\nbrown fox ","mode":"Insert"}} +{"Put":{"state":"\nThe qˇuick\nbrown fox "}} +{"Key":"shift-a"} +{"Get":{"state":"\nThe quickˇ\nbrown fox ","mode":"Insert"}} +{"Put":{"state":"\nThe quick\nbrown ˇfox "}} +{"Key":"shift-a"} +{"Get":{"state":"\nThe quick\nbrown fox ˇ","mode":"Insert"}} diff --git a/crates/vim/test_data/test_insert_first_non_whitespace.json b/crates/vim/test_data/test_insert_first_non_whitespace.json index b64ea3c808ac7e4439c479905a37d732f7c4760f..4d13cdb81c0208484801f40ad0ae5cffd4253380 100644 --- a/crates/vim/test_data/test_insert_first_non_whitespace.json +++ b/crates/vim/test_data/test_insert_first_non_whitespace.json @@ -1 +1,15 @@ -[{"Text":"The quick"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" The quick"},{"Mode":"Insert"},{"Selection":{"start":[0,1],"end":[0,1]}},{"Mode":"Insert"},{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick\nbrown fox"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nThe quick"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"The qˇuick"}} +{"Key":"shift-i"} +{"Get":{"state":"ˇThe quick","mode":"Insert"}} +{"Put":{"state":" The qˇuick"}} +{"Key":"shift-i"} +{"Get":{"state":" ˇThe quick","mode":"Insert"}} +{"Put":{"state":"ˇ"}} +{"Key":"shift-i"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Put":{"state":"The qˇuick\nbrown fox"}} +{"Key":"shift-i"} +{"Get":{"state":"ˇThe quick\nbrown fox","mode":"Insert"}} +{"Put":{"state":"ˇ\nThe quick"}} +{"Key":"shift-i"} +{"Get":{"state":"ˇ\nThe quick","mode":"Insert"}} diff --git a/crates/vim/test_data/test_insert_line_above.json b/crates/vim/test_data/test_insert_line_above.json index 45854367aeb1e866346329f46143a7ec1ac9c4b9..ce5d0d7ac19cce149894a805b06ba2e1a226c8ea 100644 --- a/crates/vim/test_data/test_insert_line_above.json +++ b/crates/vim/test_data/test_insert_line_above.json @@ -1 +1,18 @@ -[{"Text":"\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nThe quick"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nThe quick\nbrown fox\njumps over"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick\n\nbrown fox\njumps over"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick\nbrown fox\n\njumps over"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick\n\n\nbrown fox"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"ˇ"}} +{"Key":"shift-o"} +{"Get":{"state":"ˇ\n","mode":"Insert"}} +{"Put":{"state":"The ˇquick"}} +{"Key":"shift-o"} +{"Get":{"state":"ˇ\nThe quick","mode":"Insert"}} +{"Put":{"state":"The qˇuick\nbrown fox\njumps over"}} +{"Key":"shift-o"} +{"Get":{"state":"ˇ\nThe quick\nbrown fox\njumps over","mode":"Insert"}} +{"Put":{"state":"The quick\nbrown ˇfox\njumps over"}} +{"Key":"shift-o"} +{"Get":{"state":"The quick\nˇ\nbrown fox\njumps over","mode":"Insert"}} +{"Put":{"state":"The quick\nbrown fox\njumps ˇover"}} +{"Key":"shift-o"} +{"Get":{"state":"The quick\nbrown fox\nˇ\njumps over","mode":"Insert"}} +{"Put":{"state":"The quick\nˇ\nbrown fox"}} +{"Key":"shift-o"} +{"Get":{"state":"The quick\nˇ\n\nbrown fox","mode":"Insert"}} diff --git a/crates/vim/test_data/test_j.json b/crates/vim/test_data/test_j.json index da373bbcad0fe0b6d4f0f4645d9fd339d7f84e11..64aaf65ef8960f66253d788fa97f4b4306bbee70 100644 --- a/crates/vim/test_data/test_j.json +++ b/crates/vim/test_data/test_j.json @@ -1 +1,12 @@ -[{"Text":"The quick brown\nfox jumps"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick brown\nfox jumps"},{"Mode":"Normal"},{"Selection":{"start":[1,5],"end":[1,5]}},{"Mode":"Normal"},{"Text":"The quick brown\nfox jumps"},{"Mode":"Normal"},{"Selection":{"start":[1,8],"end":[1,8]}},{"Mode":"Normal"},{"Text":"The quick brown\nfox jumps"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick brown\nfox jumps"}} +{"Key":"j"} +{"Get":{"state":"The quick brown\nˇfox jumps","mode":"Normal"}} +{"Put":{"state":"The qˇuick brown\nfox jumps"}} +{"Key":"j"} +{"Get":{"state":"The quick brown\nfox jˇumps","mode":"Normal"}} +{"Put":{"state":"The quick broˇwn\nfox jumps"}} +{"Key":"j"} +{"Get":{"state":"The quick brown\nfox jumpˇs","mode":"Normal"}} +{"Put":{"state":"The quick brown\nˇfox jumps"}} +{"Key":"j"} +{"Get":{"state":"The quick brown\nˇfox jumps","mode":"Normal"}} diff --git a/crates/vim/test_data/test_jump_to_end.json b/crates/vim/test_data/test_jump_to_end.json index c556c7cb169a0582c9212d8eb2eb6ec807cc901e..fe9a948d43c76deadd946d4d0084e409ace6f155 100644 --- a/crates/vim/test_data/test_jump_to_end.json +++ b/crates/vim/test_data/test_jump_to_end.json @@ -1 +1,14 @@ -[{"Text":"The quick\n\nbrown fox jumps\nover the lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[3,4],"end":[3,4]}},{"Mode":"Normal"},{"Text":"The quick\n\nbrown fox jumps\nover the lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[3,4],"end":[3,4]}},{"Mode":"Normal"},{"Text":"The quick\n\nbrown fox jumps\nover the lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[3,16],"end":[3,16]}},{"Mode":"Normal"},{"Text":"The quick\n\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Normal"},{"Text":"The quick\n\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The ˇquick\n\nbrown fox jumps\nover the lazy dog"}} +{"Key":"shift-g"} +{"Get":{"state":"The quick\n\nbrown fox jumps\noverˇ the lazy dog","mode":"Normal"}} +{"Key":"shift-g"} +{"Get":{"state":"The quick\n\nbrown fox jumps\noverˇ the lazy dog","mode":"Normal"}} +{"Put":{"state":"The quick\n\nbrown fox jumps\nover the lazy doˇg"}} +{"Key":"shift-g"} +{"Get":{"state":"The quick\n\nbrown fox jumps\nover the lazy doˇg","mode":"Normal"}} +{"Put":{"state":"The quiˇck\n\nbrown"}} +{"Key":"shift-g"} +{"Get":{"state":"The quick\n\nbrowˇn","mode":"Normal"}} +{"Put":{"state":"The quiˇck\n\n"}} +{"Key":"shift-g"} +{"Get":{"state":"The quick\n\nˇ","mode":"Normal"}} diff --git a/crates/vim/test_data/test_jump_to_first_non_whitespace.json b/crates/vim/test_data/test_jump_to_first_non_whitespace.json index 123b752860b5977a4966cdd5e3de852ca32ac78c..c9926621954773b06baae6c4c840a32e2718604c 100644 --- a/crates/vim/test_data/test_jump_to_first_non_whitespace.json +++ b/crates/vim/test_data/test_jump_to_first_non_whitespace.json @@ -1 +1,18 @@ -[{"Text":"The quick"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" The quick"},{"Mode":"Normal"},{"Selection":{"start":[0,1],"end":[0,1]}},{"Mode":"Normal"},{"Text":""},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick\nbrown fox"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"\nThe quick"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":" \nThe quick"},{"Mode":"Normal"},{"Selection":{"start":[0,3],"end":[0,3]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The qˇuick"}} +{"Key":"^"} +{"Get":{"state":"ˇThe quick","mode":"Normal"}} +{"Put":{"state":" The qˇuick"}} +{"Key":"^"} +{"Get":{"state":" ˇThe quick","mode":"Normal"}} +{"Put":{"state":"ˇ"}} +{"Key":"^"} +{"Get":{"state":"ˇ","mode":"Normal"}} +{"Put":{"state":"The qˇuick\nbrown fox"}} +{"Key":"^"} +{"Get":{"state":"ˇThe quick\nbrown fox","mode":"Normal"}} +{"Put":{"state":"ˇ\nThe quick"}} +{"Key":"^"} +{"Get":{"state":"ˇ\nThe quick","mode":"Normal"}} +{"Put":{"state":" ˇ \nThe quick"}} +{"Key":"^"} +{"Get":{"state":" ˇ \nThe quick","mode":"Normal"}} diff --git a/crates/vim/test_data/test_jump_to_line_boundaries.json b/crates/vim/test_data/test_jump_to_line_boundaries.json index 386a2db23fb168d715e072881e70ffcf5cd918ff..6d4a76ffd60ff99115590238ecf2e7ab7cf7cf01 100644 --- a/crates/vim/test_data/test_jump_to_line_boundaries.json +++ b/crates/vim/test_data/test_jump_to_line_boundaries.json @@ -1 +1,28 @@ -[{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick\nbrown"}} +{"Key":"$"} +{"Get":{"state":"The quicˇk\nbrown","mode":"Normal"}} +{"Put":{"state":"The qˇuick\nbrown"}} +{"Key":"$"} +{"Get":{"state":"The quicˇk\nbrown","mode":"Normal"}} +{"Key":"$"} +{"Get":{"state":"The quicˇk\nbrown","mode":"Normal"}} +{"Put":{"state":"The quick\nˇbrown"}} +{"Key":"$"} +{"Get":{"state":"The quick\nbrowˇn","mode":"Normal"}} +{"Key":"$"} +{"Get":{"state":"The quick\nbrowˇn","mode":"Normal"}} +{"Put":{"state":"ˇThe quick\nbrown"}} +{"Key":"0"} +{"Get":{"state":"ˇThe quick\nbrown","mode":"Normal"}} +{"Put":{"state":"The qˇuick\nbrown"}} +{"Key":"0"} +{"Get":{"state":"ˇThe quick\nbrown","mode":"Normal"}} +{"Put":{"state":"The quicˇk\nbrown"}} +{"Key":"0"} +{"Get":{"state":"ˇThe quick\nbrown","mode":"Normal"}} +{"Put":{"state":"The quick\nˇbrown"}} +{"Key":"0"} +{"Get":{"state":"The quick\nˇbrown","mode":"Normal"}} +{"Put":{"state":"The quick\nbrowˇn"}} +{"Key":"0"} +{"Get":{"state":"The quick\nˇbrown","mode":"Normal"}} diff --git a/crates/vim/test_data/test_k.json b/crates/vim/test_data/test_k.json index cd5242c0f39f22b8b2a3b23e64d2f92297b47ba5..f064fa9fd98025af987dbfc9b2ffb97cd23edacb 100644 --- a/crates/vim/test_data/test_k.json +++ b/crates/vim/test_data/test_k.json @@ -1 +1,15 @@ -[{"Text":"The quick\nbrown fox jumps"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick\nbrown fox jumps"},{"Mode":"Normal"},{"Selection":{"start":[0,5],"end":[0,5]}},{"Mode":"Normal"},{"Text":"The quick\nbrown fox jumps"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The quick\nbrown fox jumps"},{"Mode":"Normal"},{"Selection":{"start":[0,7],"end":[0,7]}},{"Mode":"Normal"},{"Text":"The quick\nbrown fox jumps"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick\nbrown fox jumps"}} +{"Key":"k"} +{"Get":{"state":"ˇThe quick\nbrown fox jumps","mode":"Normal"}} +{"Put":{"state":"The qˇuick\nbrown fox jumps"}} +{"Key":"k"} +{"Get":{"state":"The qˇuick\nbrown fox jumps","mode":"Normal"}} +{"Put":{"state":"The quick\nˇbrown fox jumps"}} +{"Key":"k"} +{"Get":{"state":"ˇThe quick\nbrown fox jumps","mode":"Normal"}} +{"Put":{"state":"The quick\nbrown fˇox jumps"}} +{"Key":"k"} +{"Get":{"state":"The quiˇck\nbrown fox jumps","mode":"Normal"}} +{"Put":{"state":"The quick\nbrown fox jumˇps"}} +{"Key":"k"} +{"Get":{"state":"The quicˇk\nbrown fox jumps","mode":"Normal"}} diff --git a/crates/vim/test_data/test_l.json b/crates/vim/test_data/test_l.json index 3d6c4b34936935de580ed3143dcb45e1f06464df..b0db891bce42ed21f161238d1bd46b45c2085d61 100644 --- a/crates/vim/test_data/test_l.json +++ b/crates/vim/test_data/test_l.json @@ -1 +1,15 @@ -[{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,1],"end":[0,1]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[0,8],"end":[0,8]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[1,1],"end":[1,1]}},{"Mode":"Normal"},{"Text":"The quick\nbrown"},{"Mode":"Normal"},{"Selection":{"start":[1,4],"end":[1,4]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick\nbrown"}} +{"Key":"l"} +{"Get":{"state":"Tˇhe quick\nbrown","mode":"Normal"}} +{"Put":{"state":"The qˇuick\nbrown"}} +{"Key":"l"} +{"Get":{"state":"The quˇick\nbrown","mode":"Normal"}} +{"Put":{"state":"The quicˇk\nbrown"}} +{"Key":"l"} +{"Get":{"state":"The quicˇk\nbrown","mode":"Normal"}} +{"Put":{"state":"The quick\nˇbrown"}} +{"Key":"l"} +{"Get":{"state":"The quick\nbˇrown","mode":"Normal"}} +{"Put":{"state":"The quick\nbrowˇn"}} +{"Key":"l"} +{"Get":{"state":"The quick\nbrowˇn","mode":"Normal"}} diff --git a/crates/vim/test_data/test_neovim.json b/crates/vim/test_data/test_neovim.json index 244e909ba4be669ece0f58360907d0626001fe99..5aef81073afcfc0cde4774a300fe7a7e68147d64 100644 --- a/crates/vim/test_data/test_neovim.json +++ b/crates/vim/test_data/test_neovim.json @@ -1 +1,16 @@ -[{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"test"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Key":"i"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Key":"shift-T"} +{"Key":"e"} +{"Key":"s"} +{"Key":"t"} +{"Key":" "} +{"Key":"t"} +{"Key":"e"} +{"Key":"s"} +{"Key":"t"} +{"Key":"escape"} +{"Key":"0"} +{"Key":"d"} +{"Key":"w"} +{"Get":{"state":"ˇtest","mode":"Normal"}} diff --git a/crates/vim/test_data/test_o.json b/crates/vim/test_data/test_o.json index fa1a400bc0e2519b14c9da981a77575788f8b096..015890ac36722d13c8a8b8d36a886bd07a907a35 100644 --- a/crates/vim/test_data/test_o.json +++ b/crates/vim/test_data/test_o.json @@ -1 +1,18 @@ -[{"Text":"\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick\n\nbrown fox\njumps over"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick\nbrown fox\n\njumps over"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick\nbrown fox\njumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"The quick\n\n\nbrown fox"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"ˇ"}} +{"Key":"o"} +{"Get":{"state":"\nˇ","mode":"Insert"}} +{"Put":{"state":"The ˇquick"}} +{"Key":"o"} +{"Get":{"state":"The quick\nˇ","mode":"Insert"}} +{"Put":{"state":"The qˇuick\nbrown fox\njumps over"}} +{"Key":"o"} +{"Get":{"state":"The quick\nˇ\nbrown fox\njumps over","mode":"Insert"}} +{"Put":{"state":"The quick\nbrown ˇfox\njumps over"}} +{"Key":"o"} +{"Get":{"state":"The quick\nbrown fox\nˇ\njumps over","mode":"Insert"}} +{"Put":{"state":"The quick\nbrown fox\njumps ˇover"}} +{"Key":"o"} +{"Get":{"state":"The quick\nbrown fox\njumps over\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick\nˇ\nbrown fox"}} +{"Key":"o"} +{"Get":{"state":"The quick\n\nˇ\nbrown fox","mode":"Insert"}} diff --git a/crates/vim/test_data/test_p.json b/crates/vim/test_data/test_p.json index 2cf45ea2f76efffd6e32a22d4cfeb569db194a15..57fc863392d72fe70c0b5eec9ec6fd9575583150 100644 --- a/crates/vim/test_data/test_p.json +++ b/crates/vim/test_data/test_p.json @@ -1 +1,13 @@ -[{"Text":"The quick brown\nthe lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[1,6],"end":[1,6]}},{"Mode":"Normal"},{"Text":"The quick brown\nthe lazy dog\nfox jumps over"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"The quick brown\nfox jumps overjumps o\nthe lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[1,20],"end":[1,20]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The quick brown\nfox juˇmps over\nthe lazy dog"}} +{"Key":"d"} +{"Key":"d"} +{"Get":{"state":"The quick brown\nthe laˇzy dog","mode":"Normal"}} +{"Key":"p"} +{"Get":{"state":"The quick brown\nthe lazy dog\nˇfox jumps over","mode":"Normal"}} +{"Put":{"state":"The quick brown\nfox ˇjumps over\nthe lazy dog"}} +{"Key":"v"} +{"Key":"w"} +{"Key":"y"} +{"Put":{"state":"The quick brown\nfox jumps oveˇr\nthe lazy dog"}} +{"Key":"p"} +{"Get":{"state":"The quick brown\nfox jumps overjumps ˇo\nthe lazy dog","mode":"Normal"}} diff --git a/crates/vim/test_data/test_percent.json b/crates/vim/test_data/test_percent.json index 9dc0fc655b266fea00a336785306c3afcd7ba2ae..2382cc9e49906ef1ddd94ada878c3363322b509c 100644 --- a/crates/vim/test_data/test_percent.json +++ b/crates/vim/test_data/test_percent.json @@ -1 +1,58 @@ -[{"Text":"console.log(var);"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"console.log(var);"},{"Mode":"Normal"},{"Selection":{"start":[0,15],"end":[0,15]}},{"Mode":"Normal"},{"Text":"console.log(var);"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"console.log(var);"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"console.log(var);"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"console.log(var);"},{"Mode":"Normal"},{"Selection":{"start":[0,16],"end":[0,16]}},{"Mode":"Normal"},{"Text":"console.log('var', [1, 2, 3]);"},{"Mode":"Normal"},{"Selection":{"start":[0,28],"end":[0,28]}},{"Mode":"Normal"},{"Text":"console.log('var', [1, 2, 3]);"},{"Mode":"Normal"},{"Selection":{"start":[0,28],"end":[0,28]}},{"Mode":"Normal"},{"Text":"console.log('var', [1, 2, 3]);"},{"Mode":"Normal"},{"Selection":{"start":[0,27],"end":[0,27]}},{"Mode":"Normal"},{"Text":"console.log('var', [1, 2, 3]);"},{"Mode":"Normal"},{"Selection":{"start":[0,27],"end":[0,27]}},{"Mode":"Normal"},{"Text":"console.log('var', [1, 2, 3]);"},{"Mode":"Normal"},{"Selection":{"start":[0,19],"end":[0,19]}},{"Mode":"Normal"},{"Text":"console.log('var', [1, 2, 3]);"},{"Mode":"Normal"},{"Selection":{"start":[0,19],"end":[0,19]}},{"Mode":"Normal"},{"Text":"console.log('var', [1, 2, 3]);"},{"Mode":"Normal"},{"Selection":{"start":[0,19],"end":[0,19]}},{"Mode":"Normal"},{"Text":"console.log('var', [1, 2, 3]);"},{"Mode":"Normal"},{"Selection":{"start":[0,11],"end":[0,11]}},{"Mode":"Normal"},{"Text":"console.log('var', [1, 2, 3]);"},{"Mode":"Normal"},{"Selection":{"start":[0,29],"end":[0,29]}},{"Mode":"Normal"},{"Text":"let result = curried_fun()();"},{"Mode":"Normal"},{"Selection":{"start":[0,25],"end":[0,25]}},{"Mode":"Normal"},{"Text":"let result = curried_fun()();"},{"Mode":"Normal"},{"Selection":{"start":[0,24],"end":[0,24]}},{"Mode":"Normal"},{"Text":"let result = curried_fun()();"},{"Mode":"Normal"},{"Selection":{"start":[0,27],"end":[0,27]}},{"Mode":"Normal"},{"Text":"let result = curried_fun()();"},{"Mode":"Normal"},{"Selection":{"start":[0,26],"end":[0,26]}},{"Mode":"Normal"},{"Text":"let result = curried_fun()();"},{"Mode":"Normal"},{"Selection":{"start":[0,28],"end":[0,28]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇconsole.log(var);"}} +{"Key":"%"} +{"Get":{"state":"console.log(varˇ);","mode":"Normal"}} +{"Put":{"state":"console.logˇ(var);"}} +{"Key":"%"} +{"Get":{"state":"console.log(varˇ);","mode":"Normal"}} +{"Put":{"state":"console.log(ˇvar);"}} +{"Key":"%"} +{"Get":{"state":"console.logˇ(var);","mode":"Normal"}} +{"Put":{"state":"console.log(vaˇr);"}} +{"Key":"%"} +{"Get":{"state":"console.logˇ(var);","mode":"Normal"}} +{"Put":{"state":"console.log(varˇ);"}} +{"Key":"%"} +{"Get":{"state":"console.logˇ(var);","mode":"Normal"}} +{"Put":{"state":"console.log(var)ˇ;"}} +{"Key":"%"} +{"Get":{"state":"console.log(var)ˇ;","mode":"Normal"}} +{"Put":{"state":"ˇconsole.log('var', [1, 2, 3]);"}} +{"Key":"%"} +{"Get":{"state":"console.log('var', [1, 2, 3]ˇ);","mode":"Normal"}} +{"Put":{"state":"console.logˇ('var', [1, 2, 3]);"}} +{"Key":"%"} +{"Get":{"state":"console.log('var', [1, 2, 3]ˇ);","mode":"Normal"}} +{"Put":{"state":"console.log(ˇ'var', [1, 2, 3]);"}} +{"Key":"%"} +{"Get":{"state":"console.log('var', [1, 2, 3ˇ]);","mode":"Normal"}} +{"Put":{"state":"console.log('var', ˇ[1, 2, 3]);"}} +{"Key":"%"} +{"Get":{"state":"console.log('var', [1, 2, 3ˇ]);","mode":"Normal"}} +{"Put":{"state":"console.log('var', [ˇ1, 2, 3]);"}} +{"Key":"%"} +{"Get":{"state":"console.log('var', ˇ[1, 2, 3]);","mode":"Normal"}} +{"Put":{"state":"console.log('var', [1, ˇ2, 3]);"}} +{"Key":"%"} +{"Get":{"state":"console.log('var', ˇ[1, 2, 3]);","mode":"Normal"}} +{"Put":{"state":"console.log('var', [1, 2, 3ˇ]);"}} +{"Key":"%"} +{"Get":{"state":"console.log('var', ˇ[1, 2, 3]);","mode":"Normal"}} +{"Put":{"state":"console.log('var', [1, 2, 3]ˇ);"}} +{"Key":"%"} +{"Get":{"state":"console.logˇ('var', [1, 2, 3]);","mode":"Normal"}} +{"Put":{"state":"console.log('var', [1, 2, 3])ˇ;"}} +{"Key":"%"} +{"Get":{"state":"console.log('var', [1, 2, 3])ˇ;","mode":"Normal"}} +{"Put":{"state":"let result = curried_funˇ()();"}} +{"Key":"%"} +{"Get":{"state":"let result = curried_fun(ˇ)();","mode":"Normal"}} +{"Key":"%"} +{"Get":{"state":"let result = curried_funˇ()();","mode":"Normal"}} +{"Put":{"state":"let result = curried_fun()ˇ();"}} +{"Key":"%"} +{"Get":{"state":"let result = curried_fun()(ˇ);","mode":"Normal"}} +{"Key":"%"} +{"Get":{"state":"let result = curried_fun()ˇ();","mode":"Normal"}} +{"Put":{"state":"let result = curried_fun()()ˇ;"}} +{"Key":"%"} +{"Get":{"state":"let result = curried_fun()()ˇ;","mode":"Normal"}} diff --git a/crates/vim/test_data/test_repeated_cb.json b/crates/vim/test_data/test_repeated_cb.json index ccb23120911155650b6eba529e70cd8d105ccb7d..437b55ef29bbdf30389e8ba3fb3a9107f7b9bccf 100644 --- a/crates/vim/test_data/test_repeated_cb.json +++ b/crates/vim/test_data/test_repeated_cb.json @@ -1 +1,275 @@ -[{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The ick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Insert"},{"Text":"The brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Insert"},{"Text":"The quick n\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick \n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\njumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox -over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumpsover\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-ver\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"ick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The n\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Insert"},{"Text":"The \n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Insert"},{"Text":"The quick \nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick brown\njumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumpsver\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"ick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"n\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The \nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Insert"},{"Text":"The quick jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nover\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox ver\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox \nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"ick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"n\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Insert"},{"Text":"The quick -over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick brown\nover\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nver\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"ick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":" brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"n\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The -over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Insert"},{"Text":"The quick over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The quick brown\nver\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"b"} +{"Get":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"b"} +{"Get":{"state":"The ˇick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"b"} +{"Get":{"state":"The ˇ brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"b"} +{"Get":{"state":"The quick ˇn\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"b"} +{"Get":{"state":"The quick ˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"b"} +{"Get":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nˇjumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nfox ˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇover\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇver\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"b"} +{"Get":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"b"} +{"Get":{"state":"ˇick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"b"} +{"Get":{"state":"ˇ brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"b"} +{"Get":{"state":"The ˇn\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"b"} +{"Get":{"state":"The ˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"b"} +{"Get":{"state":"The quick ˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"b"} +{"Get":{"state":"The quick brown\nˇjumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nfox ˇover\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇver\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"b"} +{"Get":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"b"} +{"Get":{"state":"ˇick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"b"} +{"Get":{"state":"ˇ brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"b"} +{"Get":{"state":"ˇn\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"b"} +{"Get":{"state":"ˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"b"} +{"Get":{"state":"The ˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"b"} +{"Get":{"state":"The quick ˇjumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"b"} +{"Get":{"state":"The quick brown\nˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nˇover\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nfox ˇver\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nfox ˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"b"} +{"Get":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"b"} +{"Get":{"state":"ˇick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"b"} +{"Get":{"state":"ˇ brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"b"} +{"Get":{"state":"ˇn\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"b"} +{"Get":{"state":"ˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"b"} +{"Get":{"state":"ˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"b"} +{"Get":{"state":"The ˇjumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"b"} +{"Get":{"state":"The quick ˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"b"} +{"Get":{"state":"The quick brown\nˇover\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nˇver\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"b"} +{"Get":{"state":"The quick brown\n\nˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"b"} +{"Get":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"b"} +{"Get":{"state":"ˇick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"b"} +{"Get":{"state":"ˇ brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"b"} +{"Get":{"state":"ˇn\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"b"} +{"Get":{"state":"ˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"b"} +{"Get":{"state":"ˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"b"} +{"Get":{"state":"ˇjumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"b"} +{"Get":{"state":"The ˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"b"} +{"Get":{"state":"The quick ˇover\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"b"} +{"Get":{"state":"The quick brown\nˇver\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"b"} +{"Get":{"state":"The quick brown\nˇ\nthe lazy dog\n","mode":"Insert"}} diff --git a/crates/vim/test_data/test_repeated_ce.json b/crates/vim/test_data/test_repeated_ce.json index 3251127aed9aa15b69e6dfbf164d2eaca15f4949..3032185d648381719b083ed8887473988c3ed3a4 100644 --- a/crates/vim/test_data/test_repeated_ce.json +++ b/crates/vim/test_data/test_repeated_ce.json @@ -1 +1,275 @@ -[{"Text":" quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The qu brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"The quick\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Insert"},{"Text":"The quick brow jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Insert"},{"Text":"The quick brown\n jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox -over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-o\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\n lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":" brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The qu\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"The quick jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Insert"},{"Text":"The quick brow-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Insert"},{"Text":"The quick brown\n-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps- lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-o lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\n dog\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The qu jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"The quick-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Insert"},{"Text":"The quick browover\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Insert"},{"Text":"The quick brown\nover\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nover\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox \nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps- dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-o dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\n\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":" jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The qu-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"The quickover\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Insert"},{"Text":"The quick brow\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps\n"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-\n"},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-o\n"},{"Mode":"Insert"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quover\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"The quick\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Insert"},{"Text":"The quick brow lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Insert"},{"Text":"The quick brown\n lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-"},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-o"},{"Mode":"Insert"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"e"} +{"Get":{"state":"ˇ quick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"e"} +{"Get":{"state":"The quˇ brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"e"} +{"Get":{"state":"The quickˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"e"} +{"Get":{"state":"The quick browˇ jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"e"} +{"Get":{"state":"The quick brown\nˇ jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nˇ jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox ˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-oˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇ lazy dog\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"e"} +{"Get":{"state":"ˇ brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"e"} +{"Get":{"state":"The quˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"e"} +{"Get":{"state":"The quickˇ jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"e"} +{"Get":{"state":"The quick browˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"e"} +{"Get":{"state":"The quick brown\nˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox ˇover\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇ lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-oˇ lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇ dog\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"e"} +{"Get":{"state":"ˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"e"} +{"Get":{"state":"The quˇ jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"e"} +{"Get":{"state":"The quickˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"e"} +{"Get":{"state":"The quick browˇover\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"e"} +{"Get":{"state":"The quick brown\nˇover\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nˇover\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox ˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇ dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-oˇ dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇ\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"e"} +{"Get":{"state":"ˇ jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"e"} +{"Get":{"state":"The quˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"e"} +{"Get":{"state":"The quickˇover\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"e"} +{"Get":{"state":"The quick browˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"e"} +{"Get":{"state":"The quick brown\nˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox ˇ lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-oˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇ","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"e"} +{"Get":{"state":"ˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"e"} +{"Get":{"state":"The quˇover\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"e"} +{"Get":{"state":"The quickˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"e"} +{"Get":{"state":"The quick browˇ lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"e"} +{"Get":{"state":"The quick brown\nˇ lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nˇ lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox ˇ dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-oˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"e"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇ","mode":"Insert"}} diff --git a/crates/vim/test_data/test_repeated_cj.json b/crates/vim/test_data/test_repeated_cj.json index 0b8ac804429b4e313ecda571b4b4df579283967e..e20270f97cbe34df4f278322ddb301e3b04f9fae 100644 --- a/crates/vim/test_data/test_repeated_cj.json +++ b/crates/vim/test_data/test_repeated_cj.json @@ -1 +1,275 @@ -[{"Text":"\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":""},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"j"} +{"Get":{"state":"ˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"j"} +{"Get":{"state":"ˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"j"} +{"Get":{"state":"ˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"j"} +{"Get":{"state":"ˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"j"} +{"Get":{"state":"The quick brown\nˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇ","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"j"} +{"Get":{"state":"ˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"j"} +{"Get":{"state":"ˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"j"} +{"Get":{"state":"ˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"j"} +{"Get":{"state":"ˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"j"} +{"Get":{"state":"The quick brown\nˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇ","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"j"} +{"Get":{"state":"ˇ\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"j"} +{"Get":{"state":"ˇ\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"j"} +{"Get":{"state":"ˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"j"} +{"Get":{"state":"ˇ\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"j"} +{"Get":{"state":"The quick brown\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇ","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"j"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"j"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"j"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"j"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"j"} +{"Get":{"state":"The quick brown\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇ","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"j"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"j"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"j"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"j"} +{"Get":{"state":"ˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"j"} +{"Get":{"state":"The quick brown\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"j"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇ","mode":"Insert"}} diff --git a/crates/vim/test_data/test_repeated_cl.json b/crates/vim/test_data/test_repeated_cl.json index 89f6a104af952a6f35b98818b51f1e2c5a8b5925..397a364e5ac4e19f0c6de91f7b145c6228a2783a 100644 --- a/crates/vim/test_data/test_repeated_cl.json +++ b/crates/vim/test_data/test_repeated_cl.json @@ -1 +1,275 @@ -[{"Text":"he quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quck brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"The quickbrown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Insert"},{"Text":"The quick brow\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox umps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumpsover\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-ver\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-oer\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nhe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"e quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The quk brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"The quickrown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Insert"},{"Text":"The quick brow\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nx jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox mps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumpsver\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-er\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-or\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\ne lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":" quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The qu brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"The quickown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Insert"},{"Text":"The quick brow\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\n jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox ps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumpser\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-r\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-o\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\n lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The qubrown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"The quickwn\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Insert"},{"Text":"The quick brow\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\njumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox s-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumpsr\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-o\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nlazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"},{"Text":"uick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The qurown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Insert"},{"Text":"The quickn\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Insert"},{"Text":"The quick brow\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[0,14],"end":[0,14]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\numps-over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox -over\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-o\nthe lazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[2,11],"end":[2,11]}},{"Mode":"Insert"},{"Text":"The quick brown\n\nfox jumps-over\nazy dog\n"},{"Mode":"Insert"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"l"} +{"Get":{"state":"ˇhe quick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"l"} +{"Get":{"state":"The quˇck brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"l"} +{"Get":{"state":"The quickˇbrown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"l"} +{"Get":{"state":"The quick browˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"l"} +{"Get":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nˇox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox ˇumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇover\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇver\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-oˇer\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"1"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇhe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"l"} +{"Get":{"state":"ˇe quick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"l"} +{"Get":{"state":"The quˇk brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"l"} +{"Get":{"state":"The quickˇrown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"l"} +{"Get":{"state":"The quick browˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"l"} +{"Get":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nˇx jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox ˇmps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇver\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇer\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-oˇr\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"2"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"l"} +{"Get":{"state":"ˇ quick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"l"} +{"Get":{"state":"The quˇ brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"l"} +{"Get":{"state":"The quickˇown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"l"} +{"Get":{"state":"The quick browˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"l"} +{"Get":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nˇ jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox ˇps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇer\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇr\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-oˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"3"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇ lazy dog\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"l"} +{"Get":{"state":"ˇquick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"l"} +{"Get":{"state":"The quˇbrown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"l"} +{"Get":{"state":"The quickˇwn\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"l"} +{"Get":{"state":"The quick browˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"l"} +{"Get":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nˇjumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox ˇs-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇr\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-oˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"4"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇlazy dog\n","mode":"Insert"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"l"} +{"Get":{"state":"ˇuick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"l"} +{"Get":{"state":"The quˇrown\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"l"} +{"Get":{"state":"The quickˇn\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"l"} +{"Get":{"state":"The quick browˇ\n\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"l"} +{"Get":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nˇumps-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox ˇ-over\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-oˇ\nthe lazy dog\n","mode":"Insert"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"c"} +{"Key":"5"} +{"Key":"l"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇazy dog\n","mode":"Insert"}} diff --git a/crates/vim/test_data/test_repeated_word.json b/crates/vim/test_data/test_repeated_word.json index 54caf22a3eee5bb147b0de9579459812d746a73a..caa7ed736740031739e4ae31ed246f2088ceb53d 100644 --- a/crates/vim/test_data/test_repeated_word.json +++ b/crates/vim/test_data/test_repeated_word.json @@ -1 +1,214 @@ -[{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,4],"end":[3,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,4],"end":[3,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,4],"end":[3,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,9],"end":[3,9]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,4],"end":[3,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,9],"end":[3,9]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,9],"end":[3,9]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,4],"end":[3,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,9],"end":[3,9]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,9],"end":[2,9]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[2,10],"end":[2,10]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,4],"end":[3,4]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[3,9],"end":[3,9]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nfox jumps-over\nthe lazy dog\n"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"1"} +{"Key":"w"} +{"Get":{"state":"The ˇquick brown\n\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"1"} +{"Key":"w"} +{"Get":{"state":"The quick ˇbrown\n\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"1"} +{"Key":"w"} +{"Get":{"state":"The quick ˇbrown\n\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"1"} +{"Key":"w"} +{"Get":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"1"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n","mode":"Normal"}} +{"Key":"1"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe ˇlazy dog\n","mode":"Normal"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"2"} +{"Key":"w"} +{"Get":{"state":"The quick ˇbrown\n\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"2"} +{"Key":"w"} +{"Get":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"2"} +{"Key":"w"} +{"Get":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"2"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"2"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"2"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"2"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"2"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"2"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe ˇlazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"2"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe ˇlazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"2"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy ˇdog\n","mode":"Normal"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"3"} +{"Key":"w"} +{"Get":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"3"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"3"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"3"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"3"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"3"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"3"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"3"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe ˇlazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"3"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy ˇdog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"3"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy ˇdog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"3"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy dog\nˇ","mode":"Normal"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"4"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"4"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"4"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"4"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"4"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"4"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"4"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe ˇlazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"4"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy ˇdog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"4"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy dog\nˇ","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"4"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy dog\nˇ","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"4"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy dog\nˇ","mode":"Normal"}} +{"Put":{"state":"ˇThe quick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"5"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quˇick brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"5"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quickˇ brown\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"5"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick browˇn\n\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"5"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\nˇ\nfox jumps-over\nthe lazy dog\n"}} +{"Key":"5"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nˇfox jumps-over\nthe lazy dog\n"}} +{"Key":"5"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe ˇlazy dog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox ˇjumps-over\nthe lazy dog\n"}} +{"Key":"5"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy ˇdog\n","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumpsˇ-over\nthe lazy dog\n"}} +{"Key":"5"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy dog\nˇ","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-ˇover\nthe lazy dog\n"}} +{"Key":"5"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy dog\nˇ","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-oˇver\nthe lazy dog\n"}} +{"Key":"5"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy dog\nˇ","mode":"Normal"}} +{"Put":{"state":"The quick brown\n\nfox jumps-over\nˇthe lazy dog\n"}} +{"Key":"5"} +{"Key":"w"} +{"Get":{"state":"The quick brown\n\nfox jumps-over\nthe lazy dog\nˇ","mode":"Normal"}} diff --git a/crates/vim/test_data/test_visual_change.json b/crates/vim/test_data/test_visual_change.json index c7f6df44450190fe8954946954aad5283ef7d429..8c252e49c568f4d23a2eb725e6fffbffa5ce4182 100644 --- a/crates/vim/test_data/test_visual_change.json +++ b/crates/vim/test_data/test_visual_change.json @@ -1 +1,41 @@ -[{"Text":"The quick "},{"Mode":"Insert"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Insert"},{"Text":"The ver\nthe lazy dog"},{"Mode":"Insert"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Insert"},{"Text":"The quick brown\nfox jumps he lazy dog"},{"Mode":"Insert"},{"Selection":{"start":[1,10],"end":[1,10]}},{"Mode":"Insert"},{"Text":"The quick brown\nfox jumps over\nthe og"},{"Mode":"Insert"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Insert"},{"Text":"uick brown\nfox jumps over\nthe lazy dog"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"The ver\nthe lazy dog"},{"Mode":"Insert"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Insert"},{"Text":"The quick brown\nazy dog"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"The quick ˇbrown"}} +{"Key":"v"} +{"Key":"w"} +{"Key":"c"} +{"Get":{"state":"The quick ˇ","mode":"Insert"}} +{"Put":{"state":"The ˇquick brown\nfox jumps over\nthe lazy dog"}} +{"Key":"v"} +{"Key":"w"} +{"Key":"j"} +{"Key":"c"} +{"Get":{"state":"The ˇver\nthe lazy dog","mode":"Insert"}} +{"Put":{"state":"The quick brown\nfox jumps ˇover\nthe lazy dog"}} +{"Key":"v"} +{"Key":"w"} +{"Key":"j"} +{"Key":"c"} +{"Get":{"state":"The quick brown\nfox jumps ˇhe lazy dog","mode":"Insert"}} +{"Put":{"state":"The quick brown\nfox jumps over\nthe ˇlazy dog"}} +{"Key":"v"} +{"Key":"w"} +{"Key":"j"} +{"Key":"c"} +{"Get":{"state":"The quick brown\nfox jumps over\nthe ˇog","mode":"Insert"}} +{"Put":{"state":"The ˇquick brown\nfox jumps over\nthe lazy dog"}} +{"Key":"v"} +{"Key":"b"} +{"Key":"k"} +{"Key":"c"} +{"Get":{"state":"ˇuick brown\nfox jumps over\nthe lazy dog","mode":"Insert"}} +{"Put":{"state":"The quick brown\nfox jumps ˇover\nthe lazy dog"}} +{"Key":"v"} +{"Key":"b"} +{"Key":"k"} +{"Key":"c"} +{"Get":{"state":"The ˇver\nthe lazy dog","mode":"Insert"}} +{"Put":{"state":"The quick brown\nfox jumps over\nthe ˇlazy dog"}} +{"Key":"v"} +{"Key":"b"} +{"Key":"k"} +{"Key":"c"} +{"Get":{"state":"The quick brown\nˇazy dog","mode":"Insert"}} diff --git a/crates/vim/test_data/test_visual_delete.json b/crates/vim/test_data/test_visual_delete.json index 50750714d0b9edc386a54fd618c385201cc87c4f..42d7a69849625a653edb20aafd56df5668cd96ff 100644 --- a/crates/vim/test_data/test_visual_delete.json +++ b/crates/vim/test_data/test_visual_delete.json @@ -1 +1,44 @@ -[{"Text":"The quick "},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"The ver\nthe lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"The ver\nthe lquick brown\nfox jumps oazy dog"},{"Mode":"Normal"},{"Selection":{"start":[1,5],"end":[1,5]}},{"Mode":"Normal"},{"Text":"The ver\nthe lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"The quick brown\nfox jumps over\nthe og"},{"Mode":"Normal"},{"Selection":{"start":[2,4],"end":[2,4]}},{"Mode":"Normal"},{"Text":"uick brown\nfox jumps over\nthe lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"The ver\nthe lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[0,4],"end":[0,4]}},{"Mode":"Normal"},{"Text":"The quick brown\nazy dog"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The quick ˇbrown"}} +{"Key":"v"} +{"Key":"w"} +{"Key":"x"} +{"Get":{"state":"The quickˇ ","mode":"Normal"}} +{"Put":{"state":"The ˇquick brown\nfox jumps over\nthe lazy dog"}} +{"Key":"v"} +{"Key":"w"} +{"Key":"j"} +{"Key":"x"} +{"Get":{"state":"The ˇver\nthe lazy dog","mode":"Normal"}} +{"Key":"j"} +{"Key":"p"} +{"Get":{"state":"The ver\nthe lˇquick brown\nfox jumps oazy dog","mode":"Normal"}} +{"Put":{"state":"The ˇquick brown\nfox jumps over\nthe lazy dog"}} +{"Key":"v"} +{"Key":"w"} +{"Key":"j"} +{"Key":"x"} +{"Get":{"state":"The ˇver\nthe lazy dog","mode":"Normal"}} +{"Put":{"state":"The quick brown\nfox jumps over\nthe ˇlazy dog"}} +{"Key":"v"} +{"Key":"w"} +{"Key":"j"} +{"Key":"x"} +{"Get":{"state":"The quick brown\nfox jumps over\nthe ˇog","mode":"Normal"}} +{"Put":{"state":"The ˇquick brown\nfox jumps over\nthe lazy dog"}} +{"Key":"v"} +{"Key":"b"} +{"Key":"k"} +{"Key":"x"} +{"Get":{"state":"ˇuick brown\nfox jumps over\nthe lazy dog","mode":"Normal"}} +{"Put":{"state":"The quick brown\nfox jumps ˇover\nthe lazy dog"}} +{"Key":"v"} +{"Key":"b"} +{"Key":"k"} +{"Key":"x"} +{"Get":{"state":"The ˇver\nthe lazy dog","mode":"Normal"}} +{"Put":{"state":"The quick brown\nfox jumps over\nthe ˇlazy dog"}} +{"Key":"v"} +{"Key":"b"} +{"Key":"k"} +{"Key":"x"} +{"Get":{"state":"The quick brown\nˇazy dog","mode":"Normal"}} diff --git a/crates/vim/test_data/test_visual_line_change.json b/crates/vim/test_data/test_visual_line_change.json index 8c00d1bb1f66753d0f8593f3b0b1fcd85d1d3869..336108c6cbc668f212d5513cc22411d17cfe77dd 100644 --- a/crates/vim/test_data/test_visual_line_change.json +++ b/crates/vim/test_data/test_visual_line_change.json @@ -1 +1,35 @@ -[{"Text":"\nfox jumps over\nthe lazy dog"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nfox jumps over\nThe quick brown\nthe lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n\nthe lazy dog"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\nfox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"},{"Text":"\nthe lazy dog"},{"Mode":"Insert"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Insert"},{"Text":"\nthe lazy dog\nThe quick brown\nfox jumps over"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"The quick brown\n"},{"Mode":"Insert"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Insert"},{"Text":"The quick brown\nfox jumps over\n"},{"Mode":"Insert"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Insert"}] \ No newline at end of file +{"Put":{"state":"The quˇick brown\nfox jumps over\nthe lazy dog"}} +{"Key":"shift-v"} +{"Key":"c"} +{"Get":{"state":"ˇ\nfox jumps over\nthe lazy dog","mode":"Insert"}} +{"Key":"escape"} +{"Key":"j"} +{"Key":"p"} +{"Get":{"state":"\nfox jumps over\nˇThe quick brown\nthe lazy dog","mode":"Normal"}} +{"Put":{"state":"The quick brown\nfox juˇmps over\nthe lazy dog"}} +{"Key":"shift-v"} +{"Key":"c"} +{"Get":{"state":"The quick brown\nˇ\nthe lazy dog","mode":"Insert"}} +{"Put":{"state":"The quick brown\nfox jumps over\nthe laˇzy dog"}} +{"Key":"shift-v"} +{"Key":"c"} +{"Get":{"state":"The quick brown\nfox jumps over\nˇ","mode":"Insert"}} +{"Put":{"state":"The quˇick brown\nfox jumps over\nthe lazy dog"}} +{"Key":"shift-v"} +{"Key":"j"} +{"Key":"c"} +{"Get":{"state":"ˇ\nthe lazy dog","mode":"Insert"}} +{"Key":"escape"} +{"Key":"j"} +{"Key":"p"} +{"Get":{"state":"\nthe lazy dog\nˇThe quick brown\nfox jumps over","mode":"Normal"}} +{"Put":{"state":"The quick brown\nfox juˇmps over\nthe lazy dog"}} +{"Key":"shift-v"} +{"Key":"j"} +{"Key":"c"} +{"Get":{"state":"The quick brown\nˇ","mode":"Insert"}} +{"Put":{"state":"The quick brown\nfox jumps over\nthe laˇzy dog"}} +{"Key":"shift-v"} +{"Key":"j"} +{"Key":"c"} +{"Get":{"state":"The quick brown\nfox jumps over\nˇ","mode":"Insert"}} diff --git a/crates/vim/test_data/test_visual_line_delete.json b/crates/vim/test_data/test_visual_line_delete.json index e291fe1034f725b3ebe0b6112fbeea0e021517d3..4b8248235eda21364e7bf42e5aee3cdab36dc7b6 100644 --- a/crates/vim/test_data/test_visual_line_delete.json +++ b/crates/vim/test_data/test_visual_line_delete.json @@ -1 +1,31 @@ -[{"Text":"fox jumps over\nthe lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"fox jumps over\nThe quick brown\nthe lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick brown\nthe lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[1,6],"end":[1,6]}},{"Mode":"Normal"},{"Text":"The quick brown\nfox jumps over"},{"Mode":"Normal"},{"Selection":{"start":[1,6],"end":[1,6]}},{"Mode":"Normal"},{"Text":"the lazy dog"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"the lazy dog\nThe quick brown\nfox jumps over"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick brown"},{"Mode":"Normal"},{"Selection":{"start":[0,6],"end":[0,6]}},{"Mode":"Normal"},{"Text":"The quick brown\nfox jumps over"},{"Mode":"Normal"},{"Selection":{"start":[1,6],"end":[1,6]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The quˇick brown\nfox jumps over\nthe lazy dog"}} +{"Key":"shift-v"} +{"Key":"x"} +{"Get":{"state":"fox juˇmps over\nthe lazy dog","mode":"Normal"}} +{"Key":"p"} +{"Get":{"state":"fox jumps over\nˇThe quick brown\nthe lazy dog","mode":"Normal"}} +{"Put":{"state":"The quick brown\nfox juˇmps over\nthe lazy dog"}} +{"Key":"shift-v"} +{"Key":"x"} +{"Get":{"state":"The quick brown\nthe laˇzy dog","mode":"Normal"}} +{"Put":{"state":"The quick brown\nfox jumps over\nthe laˇzy dog"}} +{"Key":"shift-v"} +{"Key":"x"} +{"Get":{"state":"The quick brown\nfox juˇmps over","mode":"Normal"}} +{"Put":{"state":"The quˇick brown\nfox jumps over\nthe lazy dog"}} +{"Key":"shift-v"} +{"Key":"j"} +{"Key":"x"} +{"Get":{"state":"the laˇzy dog","mode":"Normal"}} +{"Key":"p"} +{"Get":{"state":"the lazy dog\nˇThe quick brown\nfox jumps over","mode":"Normal"}} +{"Put":{"state":"The quick brown\nfox juˇmps over\nthe lazy dog"}} +{"Key":"shift-v"} +{"Key":"j"} +{"Key":"x"} +{"Get":{"state":"The quˇick brown","mode":"Normal"}} +{"Put":{"state":"The quick brown\nfox jumps over\nthe laˇzy dog"}} +{"Key":"shift-v"} +{"Key":"j"} +{"Key":"x"} +{"Get":{"state":"The quick brown\nfox juˇmps over","mode":"Normal"}} diff --git a/crates/vim/test_data/test_visual_sentence_object.json b/crates/vim/test_data/test_visual_sentence_object.json index 0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/crates/vim/test_data/test_visual_sentence_object.json +++ b/crates/vim/test_data/test_visual_sentence_object.json @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/crates/vim/test_data/test_visual_word_object.json b/crates/vim/test_data/test_visual_word_object.json index 751636a5a3bc888a1b4aeb3a33a2bda47aaf5740..5514f7385a8db2a5995a539a29aa31bfcc985fc8 100644 --- a/crates/vim/test_data/test_visual_word_object.json +++ b/crates/vim/test_data/test_visual_word_object.json @@ -1 +1,230 @@ -[{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[0,10],"end":[0,14]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[0,10],"end":[0,14]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[0,15],"end":[0,17]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[1,4],"end":[1,8]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[1,4],"end":[1,8]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[2,12],"end":[2,13]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[5,0],"end":[5,0]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,0],"end":[6,2]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,3],"end":[6,3]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,4],"end":[6,8]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,4],"end":[6,8]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,9],"end":[6,9]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,10],"end":[6,14]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,15],"end":[6,15]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[7,0],"end":[7,1]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[8,0],"end":[8,1]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[9,0],"end":[9,1]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[9,6],"end":[9,10]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[10,12],"end":[10,12]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[11,0],"end":[11,0]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[0,10],"end":[0,14]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[0,10],"end":[0,14]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[0,15],"end":[0,17]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[1,4],"end":[1,8]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[1,4],"end":[1,8]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[1,9],"end":[1,9]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[2,12],"end":[2,13]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[5,0],"end":[5,0]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,0],"end":[6,8]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,0],"end":[6,8]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,0],"end":[6,8]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,0],"end":[6,8]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,9],"end":[6,9]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,10],"end":[6,14]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[6,15],"end":[6,15]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[7,0],"end":[7,1]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[8,0],"end":[8,1]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[9,0],"end":[9,1]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[9,2],"end":[9,10]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[10,12],"end":[10,12]}},{"Mode":{"Visual":{"line":false}}},{"Text":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"},{"Mode":{"Visual":{"line":false}}},{"Selection":{"start":[11,0],"end":[11,0]}},{"Mode":{"Visual":{"line":false}}}] \ No newline at end of file +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick «browˇ»n \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick browˇn \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick «browˇ»n \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown« ˇ» \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox ˇjumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox «jumpˇ»s over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox juˇmps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox «jumpˇ»s over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumpsˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumpsˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog« ˇ» \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThˇe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n«Thˇ»e-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-«quicˇ»k brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quˇick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-«quicˇ»k brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick «browˇ»n \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n« ˇ» \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n« ˇ» \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n« ˇ» fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumpˇs over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-«jumpˇ»s over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick ˇbrown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick «browˇ»n \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick browˇn \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick «browˇ»n \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brownˇ \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown« ˇ» \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox ˇjumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox «jumpˇ»s over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox juˇmps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox «jumpˇ»s over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumpsˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumpsˇ over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dogˇ \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog« ˇ» \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \nˇ\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\nˇ\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\nˇ\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThˇe-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n«The-quicˇ»k brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nTheˇ-quick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n«The-quicˇ»k brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-ˇquick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n«The-quicˇ»k brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quˇick brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\n«The-quicˇ»k brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quickˇ brown \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick ˇbrown \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick «browˇ»n \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ \n \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brownˇ \n \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \nˇ \n \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n« ˇ» \n \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \nˇ \n fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n« ˇ» \n fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \nˇ fox-jumps over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n« ˇ» fox-jumps over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumpˇs over\nthe lazy dog \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n «fox-jumpˇ»s over\nthe lazy dog \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ \n\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dogˇ \n\n","mode":{"Visual":{"line":false}}}} +{"Put":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n"}} +{"Key":"v"} +{"Key":"i"} +{"Key":"shift-w"} +{"Get":{"state":"The quick brown \nfox jumps over\nthe lazy dog \n\n\n\nThe-quick brown \n \n \n fox-jumps over\nthe lazy dog \nˇ\n","mode":{"Visual":{"line":false}}}} diff --git a/crates/vim/test_data/test_w.json b/crates/vim/test_data/test_w.json index b6fadf7ec1f96cee2187a6ef215e80e8d6ed7254..b7b3bd0e63a3b4091c5894d16954ae2880eefce7 100644 --- a/crates/vim/test_data/test_w.json +++ b/crates/vim/test_data/test_w.json @@ -1 +1,40 @@ -[{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,9],"end":[0,9]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[0,10],"end":[0,10]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[3,10],"end":[3,10]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[4,2],"end":[4,2]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[4,2],"end":[4,2]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[1,0],"end":[1,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[2,0],"end":[2,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[3,0],"end":[3,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[3,10],"end":[3,10]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[4,0],"end":[4,0]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[4,2],"end":[4,2]}},{"Mode":"Normal"},{"Text":"The quick-brown\n\n\nfox_jumps over\nthe"},{"Mode":"Normal"},{"Selection":{"start":[4,2],"end":[4,2]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"The ˇquick-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"w"} +{"Get":{"state":"The quickˇ-brown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Key":"w"} +{"Get":{"state":"The quick-ˇbrown\n\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Key":"w"} +{"Get":{"state":"The quick-brown\nˇ\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Key":"w"} +{"Get":{"state":"The quick-brown\n\nˇ\nfox_jumps over\nthe","mode":"Normal"}} +{"Key":"w"} +{"Get":{"state":"The quick-brown\n\n\nˇfox_jumps over\nthe","mode":"Normal"}} +{"Key":"w"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps ˇover\nthe","mode":"Normal"}} +{"Key":"w"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps over\nˇthe","mode":"Normal"}} +{"Key":"w"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps over\nthˇe","mode":"Normal"}} +{"Key":"w"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps over\nthˇe","mode":"Normal"}} +{"Put":{"state":"The ˇquick-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"shift-w"} +{"Get":{"state":"The quick-brown\nˇ\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quickˇ-brown\n\n\nfox_jumps over\nthe"}} +{"Key":"shift-w"} +{"Get":{"state":"The quick-brown\nˇ\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Put":{"state":"The quick-ˇbrown\n\n\nfox_jumps over\nthe"}} +{"Key":"shift-w"} +{"Get":{"state":"The quick-brown\nˇ\n\nfox_jumps over\nthe","mode":"Normal"}} +{"Key":"shift-w"} +{"Get":{"state":"The quick-brown\n\nˇ\nfox_jumps over\nthe","mode":"Normal"}} +{"Key":"shift-w"} +{"Get":{"state":"The quick-brown\n\n\nˇfox_jumps over\nthe","mode":"Normal"}} +{"Key":"shift-w"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps ˇover\nthe","mode":"Normal"}} +{"Key":"shift-w"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps over\nˇthe","mode":"Normal"}} +{"Key":"shift-w"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps over\nthˇe","mode":"Normal"}} +{"Key":"shift-w"} +{"Get":{"state":"The quick-brown\n\n\nfox_jumps over\nthˇe","mode":"Normal"}} diff --git a/crates/vim/test_data/test_x.json b/crates/vim/test_data/test_x.json index ca85e2842ba4703a54891bc74d8b39dda02bca4c..cb7eb53472aac7173a9517b5ae34fde9e40e3754 100644 --- a/crates/vim/test_data/test_x.json +++ b/crates/vim/test_data/test_x.json @@ -1 +1,12 @@ -[{"Text":"est"},{"Mode":"Normal"},{"Selection":{"start":[0,0],"end":[0,0]}},{"Mode":"Normal"},{"Text":"Tet"},{"Mode":"Normal"},{"Selection":{"start":[0,2],"end":[0,2]}},{"Mode":"Normal"},{"Text":"Tes"},{"Mode":"Normal"},{"Selection":{"start":[0,2],"end":[0,2]}},{"Mode":"Normal"},{"Text":"Tes\ntest"},{"Mode":"Normal"},{"Selection":{"start":[0,2],"end":[0,2]}},{"Mode":"Normal"}] \ No newline at end of file +{"Put":{"state":"ˇTest"}} +{"Key":"x"} +{"Get":{"state":"ˇest","mode":"Normal"}} +{"Put":{"state":"Teˇst"}} +{"Key":"x"} +{"Get":{"state":"Teˇt","mode":"Normal"}} +{"Put":{"state":"Tesˇt"}} +{"Key":"x"} +{"Get":{"state":"Teˇs","mode":"Normal"}} +{"Put":{"state":"Tesˇt\ntest"}} +{"Key":"x"} +{"Get":{"state":"Teˇs\ntest","mode":"Normal"}} diff --git a/crates/workspace/Cargo.toml b/crates/workspace/Cargo.toml index 06b20684c60f157cdbd3ed9516792f13f528f691..9a6813f6271756e06da33ab2275f4ba80a5b0e4d 100644 --- a/crates/workspace/Cargo.toml +++ b/crates/workspace/Cargo.toml @@ -43,7 +43,7 @@ lazy_static = "1.4" env_logger = "0.9.1" log = { version = "0.4.16", features = ["kv_unstable_serde"] } parking_lot = "0.11.1" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } serde = { version = "1.0", features = ["derive", "rc"] } serde_derive = { version = "1.0", features = ["deserialize_in_place"] } serde_json = { version = "1.0", features = ["preserve_order"] } diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index 585c591ad28f38af54826e0ebb7657ede4d2313f..4d7ce828d69635a4e8f43fafb7b05e0089c0aa5e 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -82,7 +82,7 @@ libc = "0.2" log = { version = "0.4.16", features = ["kv_unstable_serde"] } num_cpus = "1.13.0" parking_lot = "0.11.1" -postage = { version = "0.4.1", features = ["futures-traits"] } +postage = { workspace = true } rand = "0.8.3" regex = "1.5" rsa = "0.4"