@@ -880,6 +880,7 @@ void add_syntax(struct syntax_definition def) {
880
880
* Calculate syntax highlighting for the given line.
881
881
*/
882
882
void recalculate_syntax (line_t * line , int line_no ) {
883
+ if (env -> slowop ) return ;
883
884
/* Clear syntax for this line first */
884
885
int is_original = 1 ;
885
886
while (1 ) {
@@ -8477,6 +8478,7 @@ BIM_ACTION(paste, ARG_IS_CUSTOM | ACTION_IS_RW,
8477
8478
"Paste yanked text before (`P`) or after (`p`) the cursor."
8478
8479
)(int direction ) {
8479
8480
if (global_config .yanks ) {
8481
+ env -> slowop = 1 ;
8480
8482
if (!global_config .yank_is_full_lines ) {
8481
8483
/* Handle P for paste before, p for past after */
8482
8484
int target_column = (direction == -1 ? (env -> col_no ) : (env -> col_no + 1 ));
@@ -8513,13 +8515,13 @@ BIM_ACTION(paste, ARG_IS_CUSTOM | ACTION_IS_RW,
8513
8515
replace_line (env -> lines , env -> line_no - (direction == -1 ? 1 : 0 ) + i , global_config .yanks [i ]);
8514
8516
}
8515
8517
}
8518
+ env -> slowop = 0 ;
8516
8519
/* Recalculate whole document syntax */
8517
- for (int i = 0 ; i < env -> line_count ; ++ i ) {
8520
+ for (int i = env -> line_no - 1 ; i < env -> line_count ; ++ i ) {
8518
8521
env -> lines [i ]-> istate = 0 ;
8519
8522
}
8520
- for (int i = 0 ; i < env -> line_count ; ++ i ) {
8521
- recalculate_syntax (env -> lines [i ],i );
8522
- }
8523
+ int line_to_recalculate = (env -> line_no > 1 ? env -> line_no - 2 : 0 );
8524
+ recalculate_syntax (env -> lines [line_to_recalculate ], line_to_recalculate );
8523
8525
if (direction == 1 ) {
8524
8526
if (global_config .yank_is_full_lines ) {
8525
8527
env -> line_no += 1 ;
0 commit comments